Python文件操作
準(zhǔn)備工作:
1)
使用python來(lái)讀取文件是非常簡(jiǎn)單的操作,我們使用open()函數(shù)來(lái)打開(kāi)一個(gè)文件具练,獲取到文件句柄,
然后通過(guò)文件就可以進(jìn)行各種各樣的操作了。根據(jù)打開(kāi)方式的不同能夠執(zhí)行的操作也會(huì)有相應(yīng)的差異棍鳖。
2)
打開(kāi)文件的方式:r,w,a,r+,w+,a+,rb,wb,ab,r+b,w+b,a+b默認(rèn)使用的是r(只讀)模式。
3)
相對(duì)路徑:相對(duì)于當(dāng)前程序所在的文件夾碗旅。? ? ? ../ 返回上一級(jí)目錄
絕對(duì)路徑:1.從磁盤根目錄尋找渡处。2.互聯(lián)網(wǎng)上的一個(gè)絕對(duì)路徑。
4)
f = open('文件路徑'祟辟,mode=’文件打開(kāi)方式‘医瘫,encoding='編碼格式')#mode=可以省略。
pass
f.close()
上面三句可以換為
withopen('文件路徑'旧困,mode=’文件打開(kāi)方式‘醇份,encoding='編碼格式')asf:
pass
with這個(gè)會(huì)自己執(zhí)行完后關(guān)閉句柄。
5)按文件中數(shù)據(jù)的組織形式把文件分為文本文件和二進(jìn)制文件兩類吼具。
6)句柄:通俗的說(shuō)就是操作文件的指揮棒僚纷,如果你打開(kāi)一個(gè)文件沒(méi)有關(guān)閉,但是開(kāi)其他文件也用了這個(gè)句柄拗盒,這個(gè)時(shí)候文件就不知道該聽(tīng)誰(shuí)畔濒。
文件操作常用方法:
1)flush()
把緩沖區(qū)的內(nèi)容寫入磁盤,不關(guān)閉文件锣咒。
2)close()
把緩沖區(qū)的內(nèi)容寫入磁盤侵状,關(guān)閉文件,釋放文件對(duì)象毅整。
3)read(size)
從文件中讀取size個(gè)直接的內(nèi)容作為結(jié)果返回趣兄,
若size省略則讀取整個(gè)文件的內(nèi)容作為結(jié)果返回。
4)readline()
從文本文件中讀取1行作為字符串返回悼嫉。
5)readlines()
把文本文件中的每行作為字符串插入列表中艇潭,返回該列表。
6)seek(offset,whence)
把文件指針移到新的位置戏蔑。offset表示相對(duì)于whence的位置蹋凝。
whence用于設(shè)置相對(duì)位置的起點(diǎn):
0表示從文件開(kāi)始計(jì)算;
1表示從當(dāng)前位置開(kāi)始計(jì)算总棵;
2表示從文件末尾開(kāi)始計(jì)算鳍寂。
若whence省略,offset表示相對(duì)文件開(kāi)頭的位置情龄。
7)tell()
返回當(dāng)前文件指針的位置
8)write(s)
把字符串s的內(nèi)容寫入文本文件或?qū)懭攵M(jìn)制文件迄汛。
9)writelines(List[AnyStr])
把字符串列表寫入文本文件中捍壤,不會(huì)添加換行符。
10)truncate(size)
刪除從當(dāng)前指針位置到文件末尾的內(nèi)容鞍爱。若指定了size鹃觉,則不論指針在什么位置都留下錢size個(gè)字節(jié),其余的刪除睹逃。
文件操作:
1)r 以只讀方式打開(kāi)一個(gè)文本文件盗扇,只運(yùn)行讀數(shù)據(jù),若打開(kāi)的文件不存在沉填,則產(chǎn)生異常疗隶。
例子:<1>
f = open("file.txt", mode="r", encoding="utf-8")#創(chuàng)建句柄
s = f.read()
f.close()? # 關(guān)閉句柄
print(s)
<2>
f = open("file.txt", mode="r", encoding="utf-8")
for line inf:? # 每次讀取一行. 賦值給前面的line變量
print(line)
#print(f.readline()) #讀一行
f.close()
<3>
withopen("file.txt", mode="r", encoding="utf-8")asf:
print(f.readlines())#將每行內(nèi)容存入列表中
2)r+ 以讀寫方式打開(kāi)一個(gè)文本文件,不刪除原內(nèi)容拜轨,允許讀和寫抽减,若打開(kāi)的文件不存在,則產(chǎn)生異常橄碾。
例子:<1>
f = open("file.txt", mode="r+", encoding="utf-8")?
# r+模式, 默認(rèn)情況下光標(biāo)在文件的開(kāi)頭, 必須先讀, 后寫
f.write("周星星")#這樣將文件中第一行的前三個(gè)數(shù)據(jù)改為了周星星卵沉,光標(biāo)停留在周星星之后
s = f.read()#這里讀出的內(nèi)容為:光標(biāo)之后的所有內(nèi)容
f.flush()
f.close()
print(s)
<2>
withopen("精品", mode="r+", encoding="utf-8")asf:
? ? s = f.read(3)# 不管你前面讀了幾個(gè). 后面去寫都是在末尾
? ? f.write("哈哈")? # 1.在沒(méi)有任何操作之前進(jìn)行寫. 在開(kāi)頭寫?
#2. 如果讀取了一些內(nèi)容. 再寫, 寫入的是最后
? ? print(s)
3)w 以只寫方式打開(kāi)一個(gè)文本文件,刪除原內(nèi)容法牲,只允許寫數(shù)據(jù)史汗。若打開(kāi)的文件不存在則新建并打開(kāi)。
例子:
f = open("file.txt", mode="w", encoding="utf-8")? ?
# 寫入之前會(huì)情掉原來(lái)的內(nèi)容
f.write("十")
# f.writelines(['1', '2', '3'])#不添加換行符
f.flush()
f.close()
4)w+ 以讀寫方式打開(kāi)一個(gè)文本文件拒垃,刪除原內(nèi)容停撞,允許讀和寫,若打開(kāi)的文件不存在則新建并打開(kāi)悼瓮。
例子:<1>
f = open("file.txt", mode="w+", encoding="utf-8")?
# w 操作.會(huì)清空原來(lái)的內(nèi)容.
print(f.read())#讀出一個(gè)空行戈毒,因?yàn)楸磺蹇樟?/p>
f.write("今天天氣怎么樣")
f.seek(3)#移動(dòng)3個(gè)字節(jié),也就是一個(gè)漢子
s = f.read()#讀出的內(nèi)容為横堡。埋市。。
print(s)#天天氣怎么樣
f.flush()
f.close()
<2>
f = open("褻瀆", mode="w+", encoding="utf-8")?
# w 操作.會(huì)清空原來(lái)的內(nèi)容.
f.write("今天天氣怎么樣")#此時(shí)光標(biāo)在尾部
f.seek(3)#默認(rèn)從0開(kāi)始的
f.write('你好')#這時(shí)指針在好之后氣之前(文件中內(nèi)容為:今你好氣怎么樣)
s = f.read()
print(s)#氣怎么樣
f.seek(0)
s = f.read()
print(s)#今你好氣怎么樣
f.flush()
f.close()
5)a 以追加方式打開(kāi)一個(gè)文本文件命贴,不刪除原內(nèi)容道宅,允許在文件尾部寫數(shù)據(jù),若打開(kāi)的文件不存在則新建并打開(kāi)胸蛛。
例子:
withopen("file.txt", mode="a", encoding="utf-8")asf:
# 在原來(lái)的基礎(chǔ)上進(jìn)行追加內(nèi)容. (不管光標(biāo)在哪)
f.write("美女")
f.flush()
6)a+ 以讀寫方式打開(kāi)一個(gè)文本文件污茵,不刪除原內(nèi)容,允許在任何位置讀葬项,但只能在文件末尾追加數(shù)據(jù)泞当,若打開(kāi)的文件不存在則新建并打開(kāi)。
例子:
f = open("file.txt", mode="a+", encoding="utf-8")? ?
# 在原來(lái)的基礎(chǔ)上進(jìn)行追加內(nèi)容. # 文件內(nèi)容:你好
f.seek(3)
s = f.read()#讀取內(nèi)容
print(s)#好
f.write("小龍女")#添加到隊(duì)尾
f.flush()
f.close()
7)rb,rb+,wb,wb+,ab,ab+ 他們打開(kāi)的是一個(gè)二進(jìn)制文件玷室,其他操作與不加b的文本文件操作一樣零蓉。
例子:
withopen("../吃的", mode="rb")asf:
content = f.read()
print(content)
結(jié)果為:b'\xe7\x83....'