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
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...