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

猜你喜欢

转载自blog.csdn.net/kefeiliu/article/details/79768334
今日推荐