Python中知识点笔记 Wentao Sun. Nov.14, 2008
来这个公司11个月了,最开始来的一个笔记本用完了,里面都是工作时记录的一些片段,看到一块自己当时学/写 python程序时记录的笔记,决定放到 网上,供大家参考。
1. sys.prefix sys模块中的perfix属性表示的是C:\Program files\python25,即python的安装路径; 2. python对一个module或软件包安装的方法是:python setup.py install,或者可以加入--prefix=/XXX表示安装路径。 在一些Linux平台或Mac OS X上,当无法开启root账户时则可以将一些python系的软件安装到其他地方(except for /usr/lib or /usr/include). 3. python是case sensitive的,区分大小写; 4. SCons中 Environment的使用,我摸索了很长时间才知道这点的: env = SCons.Script.Environment() 5. frameworkversion=... framework是OS X中的一个概念,很多软件模块在Mac OS X上都是以framework包为单位的; 6. 注意platform这一module; 7. python中使用unicode编程,在前面加一个'u'即可; 8. ../..表示向上跳两层, ./表示当前目录, ../表示上一层; 9. 用CPPDEFINES表示preprocessor definitions部分; 10. 一些用用的代码片段(经过长期使用和测试的) (1) 循环搜索目录,包括子路径: # Directory Walker is used to search all files in a sepecfied directory
class DirectoryWalker: # a forward iterator that traverses a directory tree def __init__(self, directory): self.stack = [directory] self.files = [] self.index = 0 def __getitem__(self, index): while 1: try: file = self.files[self.index] self.index = self.index + 1 except IndexError: # pop next directory from stack self.directory = self.stack.pop() self.files = os.listdir(self.directory) self.index = 0 else: # got a filename fullname = os.path.join(self.directory, file) if os.path.isdir(fullname) and not os.path.islink(fullname): self.stack.append(fullname) if os.path.isfile(fullname): return fullname
(2) 向一个VS工程文件中添加你想加的东西 # Add preprocessor definition to project configurations in solution file
def AddPreprocessDefinition(projectFile, defList): shutil.copyfile(projectFile, projectFile+".bak") bakFile = projectFile+".bak" bakHandle = open(bakFile,'r') os.remove(projectFile) projectHandle = open (projectFile, 'w+') for line in bakHandle.readlines( ): matchObj = re.match(r'(\s+)PreprocessorDefinitions="(.*)".*',line) if matchObj: prefixPart = matchObj.group(1) predeflist = matchObj.group(2) for predef in defList: predeflist = predeflist + ';' + predef projectHandle.write(prefixPart + r'PreprocessorDefinitions="' + \ predeflist+'"\n') else: projectHandle.write(line) projectHandle.close() bakHandle.close() os.remove(bakFile)
(3) 从一个VS的solution文件中返回一串vcproj文件,或类似的情形 # return icproject files in solution files
def ProjectsInSolution(solutionFile, projPostFix): projFileList = [] slnFileHandler = open(solutionFile, 'r') fileContent = slnFileHandler.readlines() for line in fileContent: matchObj = re.match(r'^Project\(\"\{.*\}\"\) = \".*\", \"(.*)\", .*',line) if matchObj: origProjectFile = matchObj.groups(0)[0] if os.path.splitext(origProjectFile)[1] != projPostFix: continue icProjectFile = os.path.dirname(solutionFile) + \ "\\" + os.path.splitext(origProjectFile)[0] + \ projPostFix print icProjectFile projFileList.append(icProjectFile) slnFileHandler.close() return projFileList
(4) 删除文件 #print iccprojects
for proj in iccprojects: print proj os.remove(proj.rstrip()) if os.access(proj, os.F_OK): os.remove(proj.rstrip())
11. 注意python中list的append和extend方法的不同意义。 list = ['1', '2', '3'] list.append(['4', '5']) ==> list = ['1', '2', '3', ['4', '5']] list.extend(['4', '5']) ==> list = ['1', '2', '3', '4', '5'] 也就是说,在链接两个链表的时候,extend是链接元素elements,而append则将一整个list append添加到它的后面。 |
|