文件與文件路徑
1)Windows上的倒斜杠和os x及Linux上的正斜杠
? ? ? 在Windows上驶沼,寫路徑時(shí)使用倒斜杠作為分隔符
? ? ?os x和Linux上滔悉,使用正斜杠作為分隔符
2)當(dāng)前工作目錄
? ? ?當(dāng)前工作目錄--------cwd(current working directory)
? ? ?os.gecwd()---------獲得當(dāng)前工作目錄的字符串
? ? os.chdir()---------改變當(dāng)前工作目錄
3)絕對(duì)路徑與相對(duì)路徑
? ? ? 絕對(duì)路徑:從根目錄開始
? ? ? 相對(duì)路徑:相對(duì)于程序的當(dāng)前目錄
? ? ? 點(diǎn)(.)文件夾:當(dāng)前目錄
? ? ? 點(diǎn)點(diǎn)(..)文件夾:父文件夾
? ? ? 如下圖:bacon文件夾為當(dāng)前工作目錄
思考:
? ? ? ? ? ? ?若當(dāng)前工作目錄為C:\bacon\spam.txt刁憋,
? ? ? ? ? ? 則C:\spam.txt的相對(duì)路徑就表示為..\..\spam.txt
4)使用os.makedirs()創(chuàng)建新文件夾
5)os.path模塊
? ? ?os.path模塊包含了許多與文件名和文件路徑相關(guān)的有用函數(shù)滥嘴。
6)處理絕對(duì)路徑和相對(duì)路徑
? ? ?os.path 模塊提供了一些函數(shù)电抚,返回一個(gè)相對(duì)路徑的絕對(duì)路徑蝇恶,以及檢查給定的路徑是否為絕對(duì)路徑把还。
? ? ?調(diào)用os.path.abspath(path)將返回參數(shù)的絕對(duì)路徑的字符串。這是將相對(duì)路徑轉(zhuǎn)換為絕對(duì)路徑的簡(jiǎn)便方法俏脊。
? ? ?調(diào)用os.path.isabs(path)全谤,如果參數(shù)是一個(gè)絕對(duì)路徑,就返回True爷贫,如果參數(shù)是一個(gè)相對(duì)路徑认然,就返回False。
? ? ?調(diào)用os.path.relpath(path, start)將返回從start 路徑到path 的相對(duì)路徑的字符串漫萄。如果沒有提供start卷员,就使用當(dāng)前工作目錄作為開始路徑。
? ? ?調(diào)用os.path.split(path)腾务,將返回一個(gè)路徑的目錄名稱和基本名稱
7)查看文件大小和文件夾內(nèi)容
? ? ?調(diào)用os.path.getsize(path)將返回path 參數(shù)中文件的字節(jié)數(shù)毕骡。
? ? ?調(diào)用os.listdir(path)將返回文件名字符串的列表,包含path 參數(shù)中的每個(gè)文件(請(qǐng)注意岩瘦,這個(gè)函數(shù)在os模塊中未巫,而不是os.path)。
8)檢查路徑有效性
如果path參數(shù)所指的文件或文件夾存在启昧,調(diào)用os.path.exists(path)將會(huì)返回True叙凡,否則返回FALSE
如果path參數(shù)參數(shù)存在,且是一個(gè)文件密末,調(diào)用os.path.isfile(path)將會(huì)返回True握爷,否則返回FALSE
如果path參數(shù)參數(shù)存在,且是一個(gè)文件夾严里,調(diào)用os.path.isdir(path)將會(huì)返回True新啼,否則返回FALSE
文件讀寫過程
主要涉及純文本文件
在Python 中,讀寫文件有3 個(gè)步驟:
1)調(diào)用open()函數(shù)刹碾,返回一個(gè)File 對(duì)象燥撞。
傳入open方法的文件路徑可以是絕對(duì)路徑,也可以是相對(duì)路徑
demofile = open('F:\\delicious\\demo.txt')
demofile = open('F:\\delicious\\demo.txt','r')
兩種形式等價(jià)教硫,為“讀模式”叨吮,以讀模式打開,不能對(duì)文件內(nèi)容做寫入和修改操作
demofile = open('F:\\delicious\\demo.txt','w')
這種模式以“寫模式”打開瞬矩,寫模式將覆蓋原有文件
demofile = open('F:\\delicious\\demo.txt','a')
這種模式以“添加模式”打開,添加模式在已有文件末尾添加文本
2)調(diào)用File 對(duì)象的read()或write()方法锋玲。
讀取文件內(nèi)容景用,調(diào)用file對(duì)象的read()
有兩種方法;read()按字符讀取,將整個(gè)文件讀取為一個(gè)字符串值
? ? ? ? ? ? ? ? ? ? ? ?helloContent = helloFile.read() >>> helloContent 'Hello world!'
? ? ? ? ? ? ? ? ? ? ? ?readline()按行讀取伞插,將整個(gè)文件通過換行符讀取為一個(gè)字符串列表
? ? ? ? ? ? ? ? ? ? ? ?sonnetFile.readlines()
寫入文件割粮,調(diào)用file對(duì)象的write方法
有兩種模式:寫模式——直接復(fù)寫文件
? ? ? ? ? ? ? ? ? ? ? ? demofile = open('F:\\delicious\\demo.txt','w')
? ? ? ? ? ? ? ? ? ? ? ?demofile.write('Hello world!\n')
? ? ? ? ? ? ? ? ? ? ? ?添加模式——在文件末尾添加文本
? ? ? ? ? ? ? ? ? ? ? ? demofile = open('F:\\delicious\\demo.txt','a')
? ? ? ? ? ? ? ? ? ? ? ? demofile.write('Bacon is not a vegetable.')
PS:
write()方法不會(huì)像print()函數(shù)那樣,在字符串的末尾自動(dòng)添加換行字符媚污。必須自己添加該字符舀瓢。
如果傳遞給open()的文件名不存在,寫模式和添加模式都會(huì)創(chuàng)建一個(gè)新的空文件耗美。在讀取或?qū)懭胛募缶┧瑁{(diào)用close()方法,然后才能再次打開該文件商架。
3)調(diào)用File 對(duì)象的close()方法堰怨,關(guān)閉該文件。
? ? ?baconFile.close()
3.用shelve 模塊保存變量
1)shelve類似于一個(gè)key-value數(shù)據(jù)庫(kù)蛇摸,可以很方便的用來保存Python的內(nèi)存對(duì)象备图,其內(nèi)部使用pickle來序列化數(shù)據(jù),簡(jiǎn)單來說赶袄,使用者可以將一個(gè)列表揽涮、字典、或者用戶自定義的類實(shí)例保存到shelve中饿肺,下次需要用的時(shí)候直接取出來绞吁,就是一個(gè)Python內(nèi)存對(duì)象,不需要像傳統(tǒng)數(shù)據(jù)庫(kù)一樣唬格,先取出數(shù)據(jù)家破,然后用這些數(shù)據(jù)重新構(gòu)造一遍所需要的對(duì)象。
2)調(diào)用函數(shù)shelve.open()并傳入一個(gè)文件名购岗,然后將返回的值保存在一個(gè)變量中汰聋。可以對(duì)這個(gè)變量的shelf 值進(jìn)行修改喊积,就像它是一個(gè)字典一樣烹困。當(dāng)你完成時(shí),在這個(gè)值上調(diào)用close()乾吻。
3)在Windows 上運(yùn)行前面的代碼髓梅,你會(huì)看到在當(dāng)前工作目錄下有3 個(gè)新文件:mydata.bak、mydata.dat 和mydata.dir
4)就像字典一樣绎签,shelf 值有keys()和values()方法枯饿,返回shelf 中鍵和值的類似列表的值。因?yàn)檫@些方法返回類似列表的值诡必,而不是真正的列表奢方,所以應(yīng)該將它們傳遞給list()函數(shù),取得列表的形式。
4.用pprint.pformat()函數(shù)保存變量