這是菜鳥(niǎo)學(xué)python的第27篇原創(chuàng)文章
閱讀本文大概需要7分鐘
講完了函數(shù)和模塊,我們來(lái)講一講文件的使用,python對(duì)數(shù)據(jù)的處理分兩種一種是本地文件的處理,另外一種是通過(guò)網(wǎng)絡(luò)數(shù)據(jù)處理(也就是爬蟲(chóng)相關(guān)的).而本地的數(shù)據(jù)處理,主要是通過(guò)文件的讀和寫(xiě)完成~~
我們先想一想平時(shí)對(duì)文件處理一般遇到哪些問(wèn)題:
如何讀取一個(gè)文件的內(nèi)容,然后處理,最后寫(xiě)到一個(gè)新的文件
如何更改一個(gè)文件夾下的某一些文件名
這個(gè)兩個(gè)是非常常見(jiàn)的問(wèn)題,如何處理呢,python十幾行簡(jiǎn)單的代碼就能搞定,那我們快來(lái)學(xué)習(xí)一下吧:
Python的文件處理簡(jiǎn)單來(lái)說(shuō)分以下幾點(diǎn):
文件的讀寫(xiě)和關(guān)閉
文件的模式
文件的讀取位置
1.文件的讀寫(xiě)和關(guān)閉
python中要想獲得文件里的內(nèi)容,先要打開(kāi)文件,然后才能讀和寫(xiě).而且寫(xiě)完之后一定要記得關(guān)閉.python中對(duì)文件的打開(kāi)是通過(guò)open函數(shù)來(lái)獲得一個(gè)句柄,
獲得讀的句柄f,就可以用f.read()進(jìn)行讀入
獲得寫(xiě)的句柄f之后,就可以f.write()進(jìn)行寫(xiě)入
當(dāng)你文件處理完畢之后,要關(guān)閉文件.
(也許有同學(xué)問(wèn)為啥要關(guān)閉文件啊,因?yàn)槿舨徽jP(guān)閉,緩沖在內(nèi)存中的數(shù)據(jù)就不能真正寫(xiě)入到文件中,可能造成數(shù)據(jù)丟失)
1)文件的打開(kāi)
file_obj=open(filename,mode='r',buffering=-1)
#一共有3個(gè)參數(shù),第一個(gè)是強(qiáng)制參數(shù),后面兩個(gè)是可選的
#mode可以是讀,寫(xiě)或者追加,一般默認(rèn)是讀文件
#buffering主要是設(shè)置緩存區(qū),一般我們都是用-1表示用系統(tǒng)的默認(rèn)緩沖區(qū),若寫(xiě)100,表示緩沖區(qū)為100
2)文件的讀取
f=open(r'somefile.txt')
f.readline()#表示讀文件的一行
f.readlines()#表示把文件從頭到尾都讀出來(lái),并保存為一個(gè)列表
3)文件的寫(xiě)入
f=open(r'somefile.txt','w')
f.write()#表示把字符串寫(xiě)入
f.writelines()#表示把一個(gè)列表寫(xiě)入
4)文件的關(guān)閉
使用文件應(yīng)該牢記關(guān)閉#重要的事情說(shuō)3遍我已經(jīng)說(shuō)了3遍了
普通的關(guān)閉方法:
f=open(r'somefile.txt')
...xxx#do something
f.close()
懶人專(zhuān)用方法
with open(r'somefile.txt') as f:
f.readlines()
強(qiáng)烈推薦用with方法,這是pythonic里面非常推薦的一種方法,因?yàn)樗鼤?huì)自動(dòng)幫你關(guān)閉文件。你只要專(zhuān)注對(duì)文件的處理就可以了,是不是非常貼心~~
2.文件的模式
上面只列舉了python的讀和寫(xiě),那其他的模式怎么辦呢~~不要急,python只需要改變一下open里面的模式參數(shù)就可以.
python中有以下幾種模式,詳細(xì)見(jiàn)下表
3.文件的讀取位置
有的時(shí)候我們只想讀文件的一部分的內(nèi)容,或者我們需要從文件的某個(gè)位置讀數(shù)據(jù),應(yīng)該怎么操作呢,用seek()函數(shù)
file_obj.seek(offset,whence=0)
#seek主要是在文件中移動(dòng)指針,從whence(0表示文件頭,1表示當(dāng)前位置,2表示文件尾)偏移offset個(gè)字節(jié)
====123.txt===
123456789
1)從頭讀3個(gè)字符
f=open('123.txt')
f.seek(0,0)
print f.read(3)
f.close()
>>123
2)從尾讀3個(gè)字符
f=open('123.txt')
f.seek(-3,2)#2表示從文件指針指向尾巴,-3表示向前移動(dòng)3個(gè)字節(jié)
print f.read(3)#讀3個(gè)字節(jié)
f.close()
>>789
下面我們通過(guò)2個(gè)小例子講一下
假如你你有個(gè)叫Test目錄,它的結(jié)構(gòu)如下:
里面有2個(gè)文件,一個(gè)txt文件(里面有4行內(nèi)容),一個(gè)新建的demo.py
|----abc1109.txt---
Micrisoft
BaiDu
|----demo.py------
例子1:把a(bǔ)bc1109.txt里面的內(nèi)容讀出來(lái),寫(xiě)到一個(gè)新的文件,按照下面的格式:
|-----Output------
1: Google
2: Micrisoft
3: BaiDu
4: Facebook
先寫(xiě)一個(gè)粗糙的解法
接著我們把上面的代碼整理,重構(gòu)一下
上面的代碼重構(gòu)了一下是不是看的清晰一點(diǎn),而且用了with的用法簡(jiǎn)潔很多,是不是很爽,重構(gòu)其實(shí)是非常重要的技巧.其實(shí)這個(gè)例子有一點(diǎn)小問(wèn)題(就是沒(méi)有對(duì)文件加異常保護(hù),因?yàn)楫惓:竺嬖僦v,所以暫時(shí)先不寫(xiě)).
例子2:把Test目錄下面的2個(gè)txt文件改名字:
原來(lái)的:
|----abc1109.txt---------
|----new_abc1109.txt---
|----demo.py--------------
通過(guò)引入os模塊,把讀出來(lái)的文件名用字符串的內(nèi)置函數(shù)translate處理一下,就ok了,看源碼如下:
|----abc.txt---------
|----new_abc.txt---
|----demo.py-------
好了Python的文件快速入門(mén)就講到這里啦,希望能給初學(xué)者一些啟發(fā),若有什么不懂的,也可以留言跟我探討交流.
最后說(shuō)一下,原創(chuàng)真的不易,希望大家能夠給點(diǎn)支持,歡迎轉(zhuǎn)發(fā),留言,也是對(duì)我的一點(diǎn)鼓勵(lì)和動(dòng)力.
聯(lián)系客服