一.open文件讀取 1.open('file','mode')打開一個文件 file 要打開的文件名,需加路徑(除非是在當前目錄) mode 文件打開的模式 需要手動關閉close 2.with open('file','mode')as... 不需要手動關閉文件 3.'r': 以只讀模式打開(默 ...
一.open文件讀取
1.open('file','mode')打開一個文件
- file 要打開的文件名,需加路徑(除非是在當前目錄)
- mode 文件打開的模式
- 需要手動關閉close
2.with open('file','mode')as...
- 不需要手動關閉文件
3.'r': 以只讀模式打開(預設)(必須保證文件存在)
- 文件名中出現漢字時,需在括弧內加 u 就不會出現報錯IOError
file1 = open("D:\新方碩.txt","r") print file1.read() file1.close() file1 = open(u"D:\新方碩.txt","r") #文件內中文為手動輸入,則需轉碼 print file1.read().decode('gbk').encode('utf-8') file1.close()
- read(size) 讀取所有
- 返回字元串
- 括弧接讀取 size 位元組
#read()不傳參數時預設讀取所有 file1 = open(u"D:\新方碩.txt","r") print file1.read() file1.close() #read(3)括弧內參數3代表位元組數,一個漢字3個位元組 file1 = open(u"D:\新方碩.txt","r") print file1.read(3) file1.close()
- readline()預設讀取一行
- 返回字元串
- 括弧內填了子節數,則按位元組讀取
#readline()預設讀取一行 file1 = open(u"D:\新方碩.txt","r") print file1.readline() file1.close() #readline(size)括弧內填了子節數,則按位元組讀取 file1 = open(u"D:\新方碩.txt","r") print file1.readline(5) file1.close()
- readlines()讀取所有
- 返回列表
file1 = open(u"D:\新方碩.txt","r") print str(file1.readlines()).decode('string_escape')
with open('d:\\test1.txt','r') as file1: for i in file1.readlines(): print i
- 返回列表
備註:
- 調用
read()
會一次性讀取文件的全部內容,如果文件有10G,記憶體就爆了,所以,要保險起見,可以反覆調用read(size)
方法,每次最多讀取size個位元組的內容。另外,調用readline()
可以每次讀取一行內容,調用readlines()
一次讀取所有內容並按行返回list
。因此,要根據需要決定怎麼調用。 - 如果文件很小,
read()
一次性讀取最方便;如果不能確定文件大小,反覆調用read(size)
比較保險;如果是配置文件,調用readlines()
最方便。
4.'w':以只寫模式打開
- 若文件存在,則會自動清空文件,然後重新創建。
- 若文件不存在,則新建文件。
- 使用這個模式必須要保證文件所在目錄存在,文件可以不存在。
file1 = open("D:\\xfs.txt","w") file1.write("I am python!") file1.close()
#將test文件內容複製到test1中 file1 = open('d:\\test.txt','r') file2 = open('d:\\test1.txt','w') file3 = file2.write(file1.read()) file1.close() file2.close()
with open('d:\\test.txt','w') as file1: file2 = file1.write('緣分一道橋\n歌詞\n男:\n秦時明月漢時關\n萬里長征人未還\n但使龍城飛將在\n不教胡馬度陰山\n女:\n狼煙千里亂葬崗\n' '亂世孤魂無人訪\n無言蒼天筆墨寒\n筆刀春秋以血償\n男:\n談愛恨 不能潦草\n戰鼓敲啊敲\n用信任 立下誓言我來熬\n' '女:\n這緣份 像一道橋\n旌旗飄啊飄\n你想走就請立馬抽刀愛一筆勾銷\n合:\n談愛恨 不能潦草\n紅塵燒啊燒\n以生死 ' '無愧證明誰重要\n女:\n這緣份 像一道橋\n故事瞧一瞧\n男:\n走天涯你我卸下戰袍\n合:\n夢回長城謠')
- 該模式下不能使用 read*()方法。
#報錯IOError: File not open for reading file1 = open("D:\\xfs.txt","w") file1.write("I am python!") print file1.read()
5.'a':以追加模式打開
- 若文件存在,則會追加到文件的末尾。
- 若文件不存在,則新建文件。
- 該模式不能使用 read*()方法。
file1 = open("D:\\xfs.txt","a") file1.write("我愛HTML") file1.close()
6.seek()指針從哪裡開始寫入
file.seek(offset[, whence])
-
offset -- 開始的偏移量,也就是代表需要移動偏移的位元組數
-
whence:可選,預設值為 0。給offset參數一個定義,表示要從哪個位置開始偏移;0代表從文件開頭開始算起,1代表從當前位置開始算起,2代表從文件末尾算起。
#表示從第三個子節後開始讀取 file1 = open(u"D:\\新方碩.txt","r") file1.seek(3) print file1.read(3) file1.close()
data = open("d:\\test.txt","r") data.seek(-15,2) print data.read() data.close()
7.'r+': 以文本讀寫模式打開
- 可以寫到文件任何位置。
- 預設寫的指針開始指在文件開頭, 因此會覆寫。
- 可以使用 read*()。
file1 = open(u"D:\\新方碩.txt","r+") file1.seek(3) file1.write("HTML") file1.close() #預設從第一個子節開始覆寫 file1 = open(u"D:\\新方碩.txt","r+") file1.seek(3) file1.write("HTML") file1.close()
- 可以使用 read*()
- 可以使用 read*()