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)