Python--文件操作(操作文件)

来源:https://www.cnblogs.com/sunnytomorrow/archive/2020/05/23/12945204.html
-Advertisement-
Play Games

文件的操作包含:讀、寫、修改 文件的多種操作: 1 # 讀取文件的所有內容 2 data = open("yesteday.txt", encoding="utf-8") .read() 3 print(data) 4 5 ''' f:文件句柄(包含這個文件的文件名,字元集,大小,在硬碟中的起始位置 ...


文件的操作包含:讀、寫、修改

文件的多種操作:

 1 # 讀取文件的所有內容
 2 data = open("yesteday.txt", encoding="utf-8") .read()
 3 print(data)
 4 
 5 '''  f:文件句柄(包含這個文件的文件名,字元集,大小,在硬碟中的起始位置) '''
 6 
 7 # 'a'=append 追加
 8 f = open("yesteday2.txt", 'a', encoding="utf-8")
 9 f.write("qwerQWER1111\n") #在文件的結尾添加內容
10 f.close()
11 
12 # 'w'=write 寫,覆蓋之前的內容
13 f = open("yesteday2.txt", 'w', encoding="utf-8")
14 f.write("AAAADDDDD\n")
15 f.write("CCCCVVVVV\n")
16 f.close()
17 
18 #'r'=read 只讀
19 f = open("yesteday2.txt", 'r', encoding="utf-8")
20 print(f.read())
21 f.close()
22 
23 # 'r+' = r+a  讀和在末尾追加
24 f = open("yesteday.txt", 'r+', encoding='utf-8')
25 print(f.readline())
26 print(f.tell())
27 f.write("---nihao---\n")
28 print(f.readline()) #無輸出結果是因為r+寫操作是寫在末尾,所以游標到了末尾,讀不出來東西了
29 print(f.tell()) #tell按字元計數,返回游標的位置
30 f.seek(0) #返回到某個位置
31 print(f.read())
32 f.close()
33 
34 # 'w+' = w+r 寫和讀,寫還是只能追加在文件最後
35 f = open("yesteday.txt", 'w+', encoding='utf-8')
36 print(f.readline()) #讀不到內容,因為w+會新創建一個文件,將原文件的內容清空
37 f.write("---nihao---\n") #寫操作是寫在末尾,所以游標到了末尾,讀不出來東西了
38 f.write("---oh,god---\n")
39 print(f.tell())
40 f.seek(3)
41 print(f.tell())
42 print(f.readline()) #當游標不在一行的開頭時,readline讀取的內容為游標之後的部分
43 print(f.tell())
44 f.write("寫在第一行後面") #寫操作是寫在末尾,即使通過調整游標的位置,也無法將這行寫到第一行後面
45 print(f.tell())
46 f.seek(0)
47 print(f.read())
48 f.close()
49 
50 # 'a+'追加讀
51 f = open("yesteday.txt", 'a+', encoding='utf-8')
52 print(f.read()) #讀不出內容來,因為a+預設游標在結尾
53 f.write("---nihao---\n")
54 print(f.tell()) #tell按字元計數,返回游標的位置
55 f.seek(0) #返回到某個位置
56 print(f.read())
57 f.close()
58 
59 # 'rb' = 以二進位格式讀文件
60 f = open("yesteday.txt", 'rb') #不能加encoding的格式
61 print(f.read())
62 f.seek(0) #返回到某個位置
63 print(f.read())
64 f.seek(0) #返回到某個位置
65 print(f.read())
66 f.seek(0) #返回到某個位置
67 print(f.readline()) #readline讀一行
68 f.close()
69 
70 # 'wb' = 以二進位格式寫文件,會清空原文件內容
71 f = open("yesteday.txt", 'wb') #使用wb時寫時需要將字元串變為二進位格式
72 f.write("hello binary\n".encode()) #將hello binary變為二進位格式後寫入文件
73 f.write("hello binary\n".encode())
74 f.close()
75 
76 # 'ab' = 以二進位格式追加寫文件
77 f = open("yesteday.txt", 'ab')
78 f.write("hello binary\n".encode())
79 f.close()

有關文件的其他方法:

 1 # f = open("yesteday2.txt", 'a+', encoding="utf-8")
 2 # print(f.tell()) #游標在文件最後
 3 # print(f.read(5)) #讀取不到內容
 4 # print(f.tell()) #tell按字元計數
 5 # f.seek(3)  #返回到某個位置
 6 # print(f.readline()) #當seek回到某行的中間時,下次讀取一行時將cut掉前面的部分,讀取後面的
 7 # f.seek(3)
 8 # print(f.tell()) #獲取文件讀取到的位置
 9 # print(f.encoding) #返迴文件句柄的編碼格式
10 # print(f.fileno()) #返回編號--操作系統介面
11 # print(f.seekable()) #是否可以將游標移動回去,能返回True
12 # print(f.readable()) #判斷文件是否可讀
13 # print(f.writable()) #判斷文件是否可寫
14 # f.write("1111222333\n")
15 # f.write("1111222333\n") #寫操作會先存在記憶體緩存區,不是直接寫到硬碟,當緩存區達到一個數值時,同時寫到硬碟里
16 # f.flush() # 強制刷新--將緩存區的內容寫到硬碟
17 # f.truncate(10) #截斷 ,從指定的位置截斷後面的部分,如果不寫預設從頭開始截斷,即清空,seek移動游標沒
18 # f.close() #關閉打開的文件
19 # print(f.closed) #判斷是否關閉了

有關文件讀的示例:

 1 # 讀五行
 2 f = open("yesteday2.txt", 'r', encoding="utf-8")
 3 for i in range(5):
 4     data = f.readline()
 5     print(data)
 6 f.close()
 7 
 8 # 讀5個字元
 9 f = open("yesteday2.txt")
10 print(f.tell())
11 print(f.read(5))
12 f.close()
13 
14 # 列印除了第三行的其他內容
15 # enumerate() 函數用於將一個可遍歷的數據對象(如列表、元組或字元串)組合為一個索引序列,同時列出數據和數據下標,一般用在 for 迴圈當中
16 f = open("yesteday2.txt", 'r', encoding="utf-8")
17 for index,line in enumerate(f.readlines()):
18     if index == 3:
19         print("------")
20         continue
21     print(line.strip()) # strip() 方法用於移除字元串頭尾指定的字元(預設為空格或換行符)或字元序列
22 f.close()
23 
24 # 效率最高,讀一行往記憶體裡加一行,讀下一行會把記憶體里的上一行覆蓋掉
25 f = open("yesteday2.txt", 'r', encoding="utf-8")
26 count = 0
27 for line in f:
28     if count == 3:
29         count += 1
30         print("----------3-----------")
31         continue
32     print(line)
33     count += 1
34 f.close()

通過上面的放法,實際並不能完成文件的修改,因為寫入文件總是寫在文件最後或覆蓋掉源文件

通過以下方式可修改文件內容:

>>> testfile.txt
就像一部電影原諒慘敗的票房
我走在街上悶著頭游蕩把心事流放
關掉電話卸下行囊席地坐路旁
一如乞人不需要形象
萬家燈火帶領星光拼出個晚上
絢爛的欲望涌進了街巷每個虛弱地方
廣場音箱兀自播放某個排行榜
上榜的歌像背景一樣
那不是歌 那是孤單的歌
這白馬非馬的邏輯鮮有附和
唱著什麼 故事里多少曲折
熙來攘往中幾人識得幾人識得
那不是歌 那是我寫的歌
當時的我喜或悲已經記不得
南轅北轍 破壞熱鬧氣氛的歌
幾人識得幾人識得
被人慌慌張張按掉了
 1 f = open("testfile", "r", encoding="utf-8")
 2 f_new = open("testfile2", "w", encoding="utf-8")
 3 
 4 for line in f:
 5     if "幾人識得" in line:
 6         # '1'代表這一行只修改匹配的第一處
 7         line = line.replace("幾人識得", "誰(shui)人識得", 1)
 8     f_new.write(line)
 9 f.close()
10 f_new.close()

為了防止進行完文件操作後,忘記關閉文件,可以使用with語法:

 1 #為了避免打開文件後忘記關閉,可以通過管理上下文,即
 2 with open("testfile", "r", encoding="utf-8") as f:
 3     for line in f:
 4         print(line)
 5 
 6 #如此方式,當with代碼塊執行完畢時,內部會自動關閉 並釋放資源
 7 #在py2.7後,with又支持同時對多個文件的上下文進行管理,即
 8 with open("testfile", "r", encoding="utf-8") as f1,\
 9         open("testfile2", "w", encoding="utf-8") as f2:
10     print(f1.readline())
11     f2.writable()

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • # 5.盒模型 - box-sizing:content-box | border-box; 預設content-box 一個盒模型的功能強弱,直接決定了佈局是否簡潔,決定了編程的複雜度。 正常盒子: boxWidth = width + border*2 + padding*2; IE6混雜模式的 ...
  • 表單一點擊提交按鈕(submit)必然跳轉頁面,如果表單的action為空也會跳轉到自己的頁面,即效果為刷新當前頁。 如下,可以看到一點擊提交按鈕,瀏覽器的刷新按鈕閃了一下: 如果想要阻止表單的預設提交事件,有以下幾種方法: 1.將<input>標簽內按鈕類型從type="submit"修改為typ ...
  • 什麼是前端? 前端即網站前臺部分,也叫前端開發,運行在PC端,移動端等瀏覽器上展現給用戶瀏覽的網頁。隨著互聯網的發展,HTML5,CSS3,前端框架的應用,跨平臺響應式網頁設計能夠適應各種屏幕解析度,完美的動效設計,給用戶帶來極高的用戶體驗。 (核心技術:HTML、CSS、JavaScript) 核 ...
  • 前言 從最開始的小公司做小網站,到現在進入現在的公司做項目,發現小公司里很多很多工作都是重覆的勞動(增刪改查),不過想想也是,業務軟體最基礎的東西不就是增刪改查嗎。 但是很多時候,這種業務邏輯其實沒有必要挨個重寫。總不能說你的增刪改查比我的高級很多。很大程度上,複雜的問題只是數據太多了怎麼優化。 簡 ...
  • 解釋器是一種不常使用的設計模式,它用於描述如何構成一個簡單的語言解釋器,主要應用於使用面向對象語言開發的編譯器和解釋器設計。當我們需要開發一個新的語言時,可以考慮使用解釋器模式 模式動機 如果在系統中某一特定類型的問題發生的頻率很高,此時可以考慮將這些問題的實例表述為一個語言中的句子。再構建一個解釋 ...
  • 使用請註明出處 整理不易 ...
  • 在入正題之前我們再回顧下它的架構圖: 本文章主要分析AMP各索引的作用,與及結合1.7環境上已接入的服務數據對比後,對索引中的主要欄位進行解析。文章分為四個小章節。 1、索引類型 apm索引分為四種類型: 系統指標索引(System status metrics),索引名稱格式:apm-versio ...
  • 集合(set)是一個無序的不重覆元素序列。 可以使用大括弧 { } 或者 set() 函數創建集合,註意:創建一個空集合必須用 set() 而不是 { },因為 { } 是用來創建一個空字典。 創建格式:list_1 = {value01,value02,...} 或者 set(value) 集合作 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...