當(dāng)程序運(yùn)行時,變量是保存數(shù)據(jù)的好方法,但變量、序列以及對象中存儲的數(shù)據(jù)是暫時的,程序結(jié)束后就會丟失,如果希望程序結(jié)束后數(shù)據(jù)仍然保持,就需要將數(shù)據(jù)保存到文件中。Python提供了內(nèi)置的文件對象,以及對文件、目錄進(jìn)行操作的內(nèi)置模塊,通過這些技術(shù)可以很方便地將數(shù)據(jù)保存到文件(如文本文件等)中。
關(guān)于文件,它有兩個關(guān)鍵屬性,分別是“文件名”和“路徑”。其中,文件名指的是為每個文件設(shè)定的名稱,而路徑則用來指明文件在計算機(jī)上的位置。例如,我的Windows7筆記本上有一個文件名為projects.docx(句點之后的部分稱為文件的“擴(kuò)展名”,它指出了文件的類型),它的路徑在D:\demo\exercise,也就是說,該文件位于D盤下demo文件夾中exercise子文件夾下。
通過文件名和路徑可以分析出,project.docx是一個Word文檔,demo和exercise都是指“文件夾”(也稱為目錄)。文件夾可以包含文件和其他文件夾,例如project.docx在exercise文件夾中,該文件夾又在demo文件夾中。
注意,路徑中的D:\指的是“根文件夾”,它包含了所有其他文件夾。在Windows中,根文件夾名為D:\,也稱為D:盤。在OSX和Linux中,根文件夾是/。本教程使用的是Windows風(fēng)格的根文件夾,如果你在OSX或Linux上輸入交互式環(huán)境的例子,請用/代替。
另外,附加卷(諸如DVD驅(qū)動器或USB閃存驅(qū)動器),在不同的操作系統(tǒng)上顯示也不同。在Windows上,它們表示為新的、帶字符的根驅(qū)動器。諸如D:\或E:\。在OSX上,它們表示為新的文件夾,在/Volumes文件夾下。在Linux上,它們表示為新的文件夾,在/mnt文件夾下。同時也要注意,雖然文件夾名稱和文件名在Windows和OSX上是不區(qū)分大小寫的,但在Linux上是區(qū)分大小寫的。
Windows上的反斜杠以及OSX和Linux上的正斜杠
在Windows上,路徑書寫使用反斜杠"\"作為文件夾之間的分隔符。但在OSX和Linux上,使用正斜杠"/"作為它們的路徑分隔符。如果想要程序運(yùn)行在所有操作系統(tǒng)上,在編寫Python腳本時,就必須處理這兩種情況。
好在,用os.path.join()函數(shù)來做這件事很簡單。如果將單個文件和路徑上的文件夾名稱的字符串傳遞給它,os.path.join()就會返回一個文件路徑的字符串,包含正確的路徑分隔符。在交互式環(huán)境中輸入以下代碼:
>>> import os>>> os.path.join('demo', 'exercise')'demo\\exercise'123復(fù)制代碼類型:[python]
因為此程序是在Windows上運(yùn)行的,所以os.path.join('demo','exercise')返回'demo\\exercise'(請注意,反斜杠有兩個,因為每個反斜杠需要由另一個反斜杠字符來轉(zhuǎn)義)。如果在OSX或Linux上調(diào)用這個函數(shù),該字符串就會是'demo/exercise'。
不僅如此,如果需要創(chuàng)建帶有文件名稱的文件存儲路徑,os.path.join()函數(shù)同樣很有用。例如,下面的例子將一個文件名列表中的名稱,添加到文件夾名稱的末尾:
import os myFiles = ['accounts.txt', 'details.csv', 'invite.docx']for filename in myFiles: print(os.path.join('C:\\demo\\exercise', filename))1234復(fù)制代碼類型:[python]
運(yùn)行結(jié)果為:
C:\demo\exercise\accounts.txt C:\demo\exercise\details.csv C:\demo\exercise\invite.docx