1. 程式人生 > >【20180331】python--repo:通用功能彙總

【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[

'http_proxy']

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)