Python筆記 —— 使用open打開和操作txt文件


打開:有兩種方式

with open(r"data.txt", "r", encoding="utf-8") as f: 
f = open(r"data.txt", "r", encoding="utf-8")
f.close()

1.使用with管理文件,可以在不需要使用時自動關閉文件。

2.第一個參數是需要打開文件的位置,可以用相對路徑或者絕對路徑表示,如果文件與當前文件在同一級目錄中,直接寫文件名可以

3.文件路徑前的r表示禁用轉義,即如果文件名中出現 \ 符號,會被識別成普通字符而非轉義符

4.第二個參數"r"代表打開模式,打開模式有以下幾種

  • "r"只讀,該文件必須已存在。
  • "r+"可讀可寫。該文件必須已存在,寫為追加在文件內容末尾
  • "rb":  表示以二進制方式讀取文件。該文件必須已存在。
  • "w":  只寫。打開即默認創建一個新文件,如果文件已存在,則覆蓋寫(即文件內原始數據會被新寫入的數據清空覆蓋)。
  • "w+"寫讀。打開創建新文件並寫入數據,如果文件已存在,則覆蓋寫。
  • "wb":  表示以二進制寫方式打開,只能寫文件, 如果文件不存在,創建該文件;如果文件已存在,則覆蓋寫。
  • "a"追加寫。若打開的是已有文件則直接對已有文件操作,若打開文件不存在則創建新文件,只能執行寫(追加在后面),不能讀。
  • "a+"追加讀寫。打開文件方式與寫入方式和'a'一樣,但是可以讀。需注意的是你若剛用‘a+’打開一個文件,一般不能直接讀取,因為此時光標已經是文件末尾,除非你把光標移動到初始位置或任意非末尾的位置。(可以用seek()方法解決這個問題)

5.關鍵字參數encoding是可選參數,當文檔中沒有中文字符時可以不用寫這個參數,當有中文字符時才需要寫(這是因為Windows的默認編碼格式是GBK,而python的默認編碼格式是Unicode.utf-8)

 

操作:主要有讀和寫兩部分

讀取數據有兩種常見情況,第一種是逐行讀取,第二行是逐個數據讀取

逐行讀取數據,以以下數據為例

zhangsan   1535198308152190   F   69
lisi       1535198106072191   F   91
wangwu     1535198903072192   M   87
xiaoming   1535198811022193   M   76
xiaohong   1535198301262194   F   55

處理方法如下:

with open(r"data.txt", "r", encoding="utf-8") as f:
    for line in f:
        data = line.strip("\n").split()
        print(data)
'''
輸出:
['zhangsan', '1535198308152190', 'F', '69']
['lisi', '1535198106072191', 'F', '91']
['wangwu', '1535198903072192', 'M', '87']
['xiaoming', '1535198811022193', 'M', '76']
['xiaohong', '1535198301262194', 'F', '55']
'''

注意:1.逐行讀取文件會把每一行最后的換行符也讀取進字符串中,比如上文中for循環讀取或者用f.getline()讀取都會有這個問題,因此需要使用strip函數把頭尾的換行符都去掉(實際上只有尾部有)

   2.對於以空格分隔數據的字符串,默認無參的split()函數可以做到以任意多個空格為分界分割字符串,並把空格全部刪除。如果split()中傳入一個字符串作為參數,則split函數會以這個字符串作為標准分割,但是並不會過濾掉分割符。舉例如下:

   如果把第三行改成    data = line.strip("\n").split(“ ”)

     輸出結果的第一行將會是 ['zhangsan', '', '', '1535198308152190', '', '', 'F', '', '', '69']  ,這時需要自己手動刪除元素 “ ”

最后,讀取出來的全部都是字符串,需要手動轉換成其他類型的值

逐個數據讀取

with open(r"data.txt", "r", encoding="utf-8") as f:
    data = f.read().split()

read可以把整個文件的內容都讀取出來,read()中可以加一個參數int n,表示讀取文件中的前n個字符,適用於文本中沒有換行符的情況

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM