一、open 文件
1.open('file','mode')打開一個文件
- file 要打開的文件名,需加路徑(除非是在當前目錄)
- mode 文件打開的模式
- 需要手動關閉 close
2.with open('file','mode')as...
- 不需要手動關閉文件
二、文件操作模式
1.'r': 以只讀模式打開(默認)(必須保證文件存在)
- python2.x 文件名中出現漢字時,需在括號內加 u 就不會出現報錯IOError
#python2.x file1 = open(u"D:\新方碩.txt","r",encoding="gbk") print file1.read() file1.close() #python3.x file1 = open("D:\新方碩.txt","r",encoding="gbk") #文件內中文為手動輸入,則需轉碼 print (file1.read().decode('gbk').encode('utf-8')) file1.close()
- read(size) 讀取所有
- 返回字符串
- 括號接讀取 size 字符
#read()不傳參數時默認讀取所有 f = open("D:\work_doc\CodeFile\Study\\filename") print(f.read()) f.close() #結果如下: """ 這緣分 像一道橋 旌旗飄啊飄 你想走 就請立馬抽刀 愛一筆勾銷 """ #read(3)括號內參數3代表字符數,1個漢字1個字符 f = open("D:\work_doc\CodeFile\Study\\filename") print(f.read(3)) f.close() #結果如下: """ 這緣分 """
#文件內容如下 """ 這緣分 像一道橋 旌旗飄啊飄 你想走 就請立馬抽刀 愛一筆勾銷 """ f = open("D:\work_doc\CodeFile\Study\\filename","r",encoding="gbk") print(f.read(3)) #讀取完這行后,操作光標已經在第一行末尾了 print(f.read(3),end="") #所以接下來再次讀取會讀取第二行數據 f.close() #讀取結果如下 """ 這緣分 像一 """
- readline(size)默認讀取一行
- 返回字符串
- 括號內 size 為讀取的子符數
#readline()默認讀取一行 file1 = open("D:\新方碩.txt","r") print (file1.readline()) file1.close() #readline(size)括號內填了字符數,則按字符讀取 file1 = open("D:\新方碩.txt","r") print (file1.readline(5)) file1.close()
#文件內容如下 """ 這緣分 像一道橋 旌旗飄啊飄 你想走 就請立馬抽刀 愛一筆勾銷 """ f = open("D:\work_doc\CodeFile\Study\\filename","r",encoding="gbk") print(f.readline(),end="") #讀取完這行后,操作光標已經在第一行末尾了 print(f.readline(),end="") #所以接下來再次讀取會讀取第二行數據 f.close() #讀取結果如下 """ 這緣分 像一道橋 旌旗飄啊飄 """
- readlines()讀取所有
- 返回列表
file1 = open("D:\新方碩.txt","r") print (str(file1.readlines()).decode('string_escape')) #轉碼問題 file1.close()
with open('d:\\test1.txt','r') as file1: for i in file1.readlines(): print (i)
#去掉打印出來的換行符 #方法一 f = open("D:\work_doc\CodeFile\Study\\filename","r",encoding="gbk") data = f.readlines() for i in data: print(i.strip()) f.close() #方法二 f = open("D:\work_doc\CodeFile\Study\\filename","r",encoding="gbk") data = f.readlines() for i in data: print(i.splitlines()[0]) f.close()
#文件內容如下 """ 這緣分 像一道橋 旌旗飄啊飄 你想走 就請立馬抽刀 愛一筆勾銷 """ #對返回的結果中某一行進行處理操作 f = open("D:\work_doc\CodeFile\Study\\filename","r",encoding="gbk") data = f.readlines() line = 0 for i in data: line += 1 if line == 4: i = " --".join([i.strip(),"王力宏"]) #往第四行后面添加 "王力宏" 字符串 print(i.strip()) f.close() #返回結果如下 """ 這緣分 像一道橋 旌旗飄啊飄 你想走 就請立馬抽刀 愛一筆勾銷 --王力宏 """
- 最優讀取文件方法,不占內存
#文件內容如下 """ 這緣分 像一道橋 旌旗飄啊飄 你想走 就請立馬抽刀 愛一筆勾銷 """ f = open("D:\work_doc\CodeFile\Study\\filename","r",encoding="gbk") for i in f: #for循環內部將 f 對象做出了一個迭代器,用一行數據取一行數據,用完后(print)的數據刪除,不占內存空間 print(i.strip()) f.close() #返回結果如下 """ 這緣分 像一道橋 旌旗飄啊飄 你想走 就請立馬抽刀 愛一筆勾銷 """
備注:
- 調用
read()和readlines()會一次性讀取文件的全部內容,如果文件有10G,內存就爆了,所以,要保險起見,可以反復調用read(size)方法,每次最多讀取 size 個字節的內容。另外,調用readline()可以每次讀取一行內容。 - 如果文件很小,
read()一次性讀取最方便;如果不能確定文件大小,反復調用read(size)比較保險;如果是配置文件,調用readlines()最方便。
2.'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())
3.'a':以追加模式打開
- 若文件存在,則會追加到文件的末尾。
- 若文件不存在,則新建文件。
- 該模式不能使用 read*() 方法。
#寫入前文件內容如下 """ 這緣分 像一道橋 旌旗飄啊飄 你想走 就請立馬抽刀 愛一筆勾銷 """ #進行追加寫入操作 f = open("D:\work_doc\CodeFile\Study\\filename","a") f.write("\n--王力宏") f.close() #寫入后文件內容如下 """ 這緣分 像一道橋 旌旗飄啊飄 你想走 就請立馬抽刀 愛一筆勾銷 --王力宏 """
4.'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()
5.'w+': 以文本讀寫模式打開(打開前文件會被清空)
- 文件不存在時,寫入會自動創建文件
f = open("music","w+",encoding="utf8") f.write("秦時明月漢時關\n") f.write("萬里長征人未還\n") f.write("但使龍城飛將在\n") f.write("不教胡馬度陰山") f.close() #結果如下 """ 秦時明月漢時關 萬里長征人未還 但使龍城飛將在 不教胡馬度陰山 """
6.'a+': 以文本讀寫模式打開(寫只能寫在文件末尾)
#寫入前文件內容如下 """ 秦時明月漢時關 萬里長征人未還 """ f = open("music","a+",encoding="utf8") f.write("\n--王力宏") f.close() #寫入后內容 """ 秦時明月漢時關 萬里長征人未還 --王力宏 """

