文件與文件路徑
讀寫文件
用shelve模塊保存變量
1 python 讀寫文件
1.1 文件與文件路徑
windows下非春,
import os
os.path.join('usr', 'bin', 'spam')
usr\\bin\\spam
linux下,
import os
os.path.join('usr', 'bin', 'spam')
usr/bin/spam
1.2 當前工作目錄
每個運行在計算機上的程序,都有一個“當前工作目錄”瓦哎,或cwd漓藕。所有沒有從根文件夾開始的文件名或路徑陶珠,都假定在當前工作目錄下。利用os.getcwd()函數(shù)可以取得當前工作路徑的字符串撵术,并可以利用os.chdir()改變它背率。
>>>import os
>>>os.getcwd()
'c:\\python34'
>>os.chdir('c:\\windows\\system32')
>>>os.getcwd()
'c:\\windows \\system32'
1.3 絕對路徑和相對路徑
有兩種方法指定一個文件路徑
絕對路徑,它總是從根目錄開始嫩与。
相對路徑寝姿,它相對于程序的當前工作目錄。
1.4 用os.makedirs()創(chuàng)建新文件夾
程序可以用 os.makedirs()創(chuàng)建新文件夾(目錄)划滋。在交互式環(huán)境中輸入以下代碼:
>>>import os
>>>os.makedirs('c:\\delicious\\walnut\\waffles')
這里創(chuàng)建了所有必要的中間文件夾饵筑。
1.5 os.path模塊
os.path模塊包含了許多與文件名和文件路徑相關(guān)的有用函數(shù)。在1.1中已經(jīng)使用了os.path來構(gòu)建
所有操作系統(tǒng)上都有效的路徑处坪。
1.5 處理絕對路徑和相對路徑
os.path模塊提供了一些函數(shù)根资,返回一個相對路徑的絕對路徑架专,以及檢查給定的路徑是否為絕對路徑。
調(diào)用os.path.abspath(path)將返回參數(shù)的絕對路徑的字符串玄帕,這是將相對路徑轉(zhuǎn)換為絕對路徑的簡便方法部脚。
調(diào)用os.path.isabs(path),如果參數(shù)是一個絕對路徑裤纹,就返回True委刘,如果參數(shù)是一個相對路徑,就返回False鹰椒。
在交互式環(huán)境下嘗試以下函數(shù)
>>>os.path.abspath('.')
'c:\\Python34'
>>os.path.abspath('.\\Script')
'c:\\Python34\\Script'
>>os.path.isabs('.')
False
>>>os.path.isabs(os.path.abspath('.'))
True
2 文件讀寫過程
在Python中锡移,讀寫文件有3個步驟:
1,調(diào)用open()函數(shù)漆际,返回一個File對象淆珊。
2,調(diào)用File對象的read()或write()方法奸汇。
3施符,調(diào)用File對象的close()方法,關(guān)閉該文件茫蛹。
2.1 用open()函數(shù)打開文件
要用open()函數(shù)打開一個文件操刀,就要向它傳遞一個字符串路徑,表明希望打開的文件婴洼。這既可以是絕對
路徑骨坑,也可以是相對路徑。open()函數(shù)返回 一個File()的對象柬采。
2.2 讀取文件內(nèi)容
既然有了一個File()的對象欢唾,就可以開始從它讀取內(nèi)容。如果你希望將整個文件的內(nèi)容讀取為一個字符串值粉捻,就使用File()對象r read()方法礁遣。
>>>helloContent = helloFile.read()
>>>helloContent
'Hello world'
或者,可以使用readlines()方法肩刃,從該文件中取得一個字符串的列表祟霍。列表中的每一個字符串就是文本中的每一行。
2.3 寫入文件
打開文件時如果用讀模式盈包,則不能寫入文件沸呐。你需要以“寫入純文本模式”或“添加純文本模式”打開該文件,或簡稱為“寫模式”或“添加模式”呢燥。
寫模式將覆蓋原有的文件崭添。添加模式則是在已有的文件末尾添加文本。如果傳遞給open()文件名不存在叛氨,寫模式和覆蓋模式則都會創(chuàng)建一個新的空文件呼渣。在讀取或?qū)懭胛募蠹椋{(diào)用close()方法,然后才能再次打開該文件屁置。
下面是代碼示例焊夸。
>>>baconFile = open('bacon.txt', 'w') # 'w'表示的是寫模式
>>>baconFile.write('Hello world!\n')
13
>>>baconFile.close()
>>>baconFile = open('bacon.txt', 'a') # 'a'表示的是添加模式
>>>baconFile.write('Bacon is not a vegetable.')
25
>>>baconFile.close()
>>>baconFile.open('bacon.txt')
>>>content = open('bacon.txt')
>>>baconFile.close()
>>>print(content)
Hello world!
Bacon is not a vegetable.
注意,write() 方法不會像print()函數(shù)那樣缰犁,在字符串的末尾自動添加換行字符淳地,必須自己添加該字符。