一、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()
#傳回結果如下
"""
這緣分 像一道橋
旌旗飄啊飄
你想走 就請立馬抽刀
愛一筆勾銷
"""
備注:
- 調用
會一次性讀取檔案的全部内容,如果檔案有10G,記憶體就爆了,是以,要保險起見,可以反複調用read()和readlines()
方法,每次最多讀取 size 個位元組的内容。另外,調用read(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()
#寫入後内容
"""
秦時明月漢時關
萬裡長征人未還
--王力宏
"""
作者:多測師進階講師_鄭sir
微信:ZhengYing8887
出處:https://www.cnblogs.com/ZhengYing0813/
備注:本文版權歸作者所有,歡迎轉載和添加作者微信探讨技術,但未經作者同意必須在文章頁面給出原文連結,否則保留追究法律責任的權利。