今天來學(xué)習(xí)python中的文件操作這是很關(guān)鍵的凭疮,
這次先學(xué)習(xí)文件的讀寫枫慷,需要注意的是文件的權(quán)限的問題。
總結(jié)如下最常用的權(quán)限:
權(quán)限 | 備注 |
---|---|
r | 打開只讀文件铡俐,該文件必須存在。 |
w | 打開只寫文件,若文件存在則文件長度清為0辩涝, 即該文件內(nèi)容會消失神帅。若文件不存在則建立該文件。 |
r+ | 打開可讀寫的文件备恤,該文件必須存在稿饰。 |
w+ | 打開可讀寫文件,若文件存在則文件長度清為零露泊,即該文件內(nèi)容會消失喉镰。若文件不存在則建立該文件。 |
a | 以附加的方式打開只寫文件惭笑。若文件不存在侣姆,則會建立該文件,如果文件存在沉噩,寫入的數(shù)據(jù)會被加到文件尾捺宗,即文件原先的內(nèi)容會被保留。 |
a+ | 以附加方式打開可讀寫的文件川蒙。 若文件不存在蚜厉,則會建立該文件,如果文件存在畜眨,寫入的數(shù)據(jù)會被加到文件尾后昼牛,即文件原先的內(nèi)容會被保留。 |
總結(jié)下來有+的均可以讀寫康聂。
只使用權(quán)限w寫入的時候每一行會產(chǎn)生空行贰健。
解決方法: 使用權(quán)限wb寫入的時候不會產(chǎn)生空行。
你們也可以參考廖雪峰大神的python教學(xué)快速入門恬汁。
代碼塊
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : SundayCoder-俊勇
# @File : filelearn.py
# 今天我們來學(xué)習(xí)一下python中文件的操作伶椿。
# 很多機器學(xué)習(xí)需要讀入csv文件
# 所以文件的操作是機器學(xué)習(xí)必須學(xué)會的一個技能
# (1)文件的打開和關(guān)閉[不標(biāo)準(zhǔn)的寫法]
f=open('hello.txt','r')
print f.read()
f.close()
# 文件的操作的最后一步必須是關(guān)閉文件。
# 因為read()函數(shù)是一次性輸出文件的所有數(shù)據(jù)
# 所以輸出結(jié)果為:
# hello wolrd
# 你好啊
# (2)文件打開過程中會有錯誤氓侧,所以可以使用try-finally來處理錯誤
# 文件的打開與關(guān)閉的標(biāo)準(zhǔn)寫法脊另。
try:
f = open('hello.txt', 'r')
print f.read()
finally:
if f:#如果f存在則關(guān)閉
f.close()
# (3)文件的打開和關(guān)閉每次都這么寫實在太繁瑣,
# 所以甘苍,Python引入了with語句來自動幫我們調(diào)用close()方法:
with open('hello.txt', 'r') as f:
print f.read()
# 注:第三種是最常用的一種方法尝蠕,必須要掌握的方法。
# (4)如果打開的文件不存在則會報錯:
# with open('hello1.txt', 'r') as f:
# print f.read()
# 報錯的內(nèi)容為:IOError: [Errno 2] No such file or directory: 'hello1.txt'
# 報錯會提示你打開的文件不存在载庭。
# (5)讀取文件的方法的比較看彼。
# 調(diào)用read()會一次性讀取文件的全部內(nèi)容,
# 如果文件有10G囚聚,內(nèi)存就爆了靖榕,所以,
# 要保險起見顽铸,可以反復(fù)調(diào)用read(size)方法茁计,
# 每次最多讀取size個字節(jié)的內(nèi)容。
# 另外谓松,調(diào)用readline()可以每次讀取一行內(nèi)容星压,
# 調(diào)用readlines()一次讀取所有內(nèi)容并按行返回list践剂。
# 因此,要根據(jù)需要決定怎么調(diào)用娜膘。
# 如果文件很小逊脯,read()一次性讀取最方便;
# 如果不能確定文件大小竣贪,反復(fù)調(diào)用read(size)比較保險军洼;
# 如果是配置文件,調(diào)用readlines()最方便:
# 例如:
with open('hello.txt', 'r') as f:
print f.read(2)
# 輸出的結(jié)果為:he
# 注:英文字母一個占一個字節(jié)演怎,中文一個占兩個字節(jié)匕争。
# 讀取文件最最常用的一種方法。
with open('hello.txt', 'r') as f:
for line in f.readlines():#每次讀取一行
print(line.strip()) # 把每一個行的末尾的'\n'刪掉
# 輸出的結(jié)果:
# hello wolrd
# 你好啊
# (8)文件的寫操作爷耀。
# fp.write(str) #把str寫到文件中甘桑,
# write()并不會在str后加上一個換行符
# fp.writelines(seq) #把seq的內(nèi)容全部寫到文件中
# (多行一次性寫入)這個函數(shù)也只是忠實地寫入,不會在每行后面加上任何東西畏纲。
with open('hello1.txt', 'w') as f:
f.write("this is new content")
# 寫入之后重新查看文檔內(nèi)容
with open('hello1.txt', 'r') as f:
for line in f.readlines(): # 每次讀取一行
print(line.strip()) # 把每一個行的末尾的'\n'刪掉
# 輸出的結(jié)果為:this is new content
# 說明原來的內(nèi)容已經(jīng)被覆蓋掉了扇住,這與文章的權(quán)限有關(guān)。
#文章的權(quán)限總結(jié)如下:
# (1)r 打開只讀文件盗胀,該文件必須存在。
# (2)r+ 打開可讀寫的文件锄贼,該文件必須存在票灰。
# (3)w 打開只寫文件,若文件存在則文件長度清為0宅荤,
# 即該文件內(nèi)容會消失屑迂。若文件不存在則建立該文件。
# (4)w+ 打開可讀寫文件冯键,若文件存在則文件長度清為零惹盼,
# 即該文件內(nèi)容會消失。若文件不存在則建立該文件惫确。
# (5)a 以附加的方式打開只寫文件手报。若文件不存在,
# 則會建立該文件改化,如果文件存在掩蛤,寫入的數(shù)據(jù)會被加到文件尾,
# 即文件原先的內(nèi)容會被保留陈肛。
# (6) a+ 以附加方式打開可讀寫的文件揍鸟。
# 若文件不存在,則會建立該文件句旱,
# 如果文件存在阳藻,寫入的數(shù)據(jù)會被加到文件尾后晰奖,
# 即文件原先的內(nèi)容會被保留。
加油一起學(xué)習(xí)腥泥,更新完畢