天天看點

python(open 檔案)

一、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()

#寫入後内容
"""
秦時明月漢時關
萬裡長征人未還
--王力宏
"""      
python(open 檔案)

作者:多測師進階講師_鄭sir

微信:ZhengYing8887

出處:https://www.cnblogs.com/ZhengYing0813/

備注:本文版權歸作者所有,歡迎轉載和添加作者微信探讨技術,但未經作者同意必須在文章頁面給出原文連結,否則保留追究法律責任的權利。

繼續閱讀