zoukankan      html  css  js  c++  java
  • Python中知识点笔记

    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添加到它的后面。

  • 相关阅读:
    UVALive 4660 A+B
    UVALive 4660 A+B
    UVA10474 Where is the Marble?
    UVA10474 Where is the Marble?
    UVA1339 UVALive3213 POJ2159 ZOJ2658 Ancient Cipher【密码】
    hdu_1108 最小公倍数
    hdu_1106 排序
    hdu_1205 吃糖果
    hdu_1201 18岁生日
    hdu_1005 Number Sequence
  • 原文地址:https://www.cnblogs.com/SunWentao/p/1333651.html
Copyright © 2011-2022 走看看