Python中知識點筆記

來源:互聯網
上載者:User

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

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.