【20180331】python--repo:通用功能彙總
1.檔案系統常用 import os ; import shutil
os.getcwd
os.path.expanduser(~/xx)
os.path.abspath
os.path.dirname
os.path.isdir
os.path.isfile
os.path.exists
os.path.join
os.mkdir
os.listdir
os.chdir
shutil.copyfile
shutil.copytree
shutil.rmtree
os.environment
e.g. os.environ[
2.系統資訊
sys.version_info
sys.executable
3.re
以gitconfig替換機制為例:
m = re.compile(r'^url\.(.*)\.insteadof (.*)$').match(line)
if m:
new_url = m.group(1)
old_url = m.group(2)
if url.startswith(old_url):
url = new_url + url[len(old_url):]
4.exception
repo檔案中用到了OSError和自定義的CloneFailure,以及少量的HTTPError和URLError,用來判斷環境中建立目錄和連線下載地址時的異常問題。
5.inithttp
涉及python http爬蟲的一些基本操作,包括BasicauthHandler和ProxyHandler、build_opener和install_opener。
6.CheckGitversion
使用列表格式的cmd和subprocess獲取資訊,使用startswith檢查頭部內容,使用高階函式map和lambda進行格式轉換和版本號比較。
cmd = [GIT, '--version'] proc = subprocess.Popen(cmd, stdout=subprocess.PIPE) ver_str = proc.stdout.read().strip() proc.stdout.close() proc.wait() if not ver_str.startswith('git version '): print >>sys.stderr, 'error: "%s" unsupported' % ver_str raise CloneFailure() ver_str = ver_str[len('git version '):].strip() ver_act = tuple(map(lambda x: int(x), ver_str.split('.')[0:3])) if ver_act < MIN_GIT_VERSION: need = '.'.join(map(lambda x: str(x), MIN_GIT_VERSION)) print >>sys.stderr, 'fatal: git %s or later required' % need raise CloneFailure()
7.__file__表示當前檔案的位置,參考:
os.path.abspath(__file__) os.path.join(os.path.dirname(__file__), 'repo')
8.__name__表示當前檔案的執行屬性,當一個py檔案通過python命令直接執行時,該檔案以top level script模式執行,檔案的__name__屬性即為__main__; 當一個py檔案通過模組包方式執行時,該檔案的__name__屬性即為模組的路徑。
9. 多功能輸出函式
def _print(*objects,**kwargs):
sep = kwargs.get("sep","")
end = kwargs.get("end","\n")
out = kwargs.get("file",sys.stdout)
out.write(sep.join(objects)+end)
10. 命令列引數解析 optparse
MyOption = optparse.OptionParser(usage="",version="")
MyOption.add_option()
MyOption.add_option_group()
option, args = MyOption.parse_args(xx)
11. string常用函式
Mystring.startwith(xx)
Mystring.strip()
Mystring.split()
Mystring.join(seq) '.'.join(map(string,GIT_VV))
12. 格式化輸出
'%d ... %s ...' %(xx,xx)
string.format(xx,xx) '{0},{1}:{2}:{0}'.format(xxx) 填充與對齊:: char ^ < >
13. 執行緒 threading
Mythread = threading.Thread(target,args,kwargs)
Mythread.start()
Mythread.join()
Mythread.isAlive()
threading.activeCount()
threading.enumerate()
threading.Semaphore()
14. 換行符
print預設加換行符(加逗號可取消)
write方法不會自動加換行符,所以通常stdout.write('...'+'\n')
read方法不會自動去掉換行符,所以通常string.strip()
15. 多功能輸入函式
def Myinput():
class Myexception(Exception):
"'......'"
Mymatch = re.compile(r'[a-zA-Z]+')
try:
Myinput = input(tips)
if not Mymatch.match(Myinput):
raise Myexception("...")
else:
return Myinput
except Exception as error:
print ("... %s ..." ) % (error)
return None
16. 高階函式配合lambda匿名函式
list(filter((lambda x: x not in set([i for in in xx for j in xx if i%j xxx])),rang(10,20)))
17. 生成器
def ppdi():
n=1
while 1:
list = (i for in in xx if xx)
yield list
n+=1
if n>5:
break
for value in ppdi():
print(value)
for item in value:
print(item)