讀寫檔案是最常見的io操作,python內建了讀寫檔案的函式,用法和c是相容的.
讀寫檔案前,我們先必須了解一下,在磁碟上讀寫檔案的功能都是由作業系統提供的,現代作業系統不允許普通的程式直接操作磁碟,所以讀寫檔案就是請求作業系統開啟乙個檔案物件(通常稱為檔案描述符),然後通過作業系統提供的介面從這個檔案物件中讀取資料(讀檔案),或者把資料寫入這個檔案物件(寫檔案)
讀檔案
在python中,使用open()函式,可以開啟乙個已經存在的檔案,或者建立乙個新檔案
格式為:open(檔案路徑,訪問模式)
讀二進位制檔案#以唯讀方式的模式開啟乙個當前路徑下的test.txt檔案,並將其賦值給變數f
#open()函式預設以唯讀方式寫入,故唯讀模式"r"可省略不寫
f=open("test.txt","r")
#呼叫read()方法一次性讀取檔案的全部內容(read方法適用於讀取檔案內容較少時),python語言將檔案內容讀到記憶體中,用字串的方式表示,並列印到螢幕上
content = f.read() #將程式所得到的返回值存放到變數content中
print(content) #列印其返回值,即就是該檔案的內容
#最後一步是呼叫close()方法關閉檔案,檔案使用完畢之後必須關閉.
f.close()
input=open("test.txt","rb")
讀取一行內容,使用readline()方法:
結果為:f=open("test.txt","r")
f.readline()
讀取所有行的內容,使用readlines()方法'this
is first line\n'
輸出結果為:f=open("test.txt","r")
f.readlines()
f.close()
['this
is first line\n', 'this
is second line\n']
f.close()
遍歷檔案資料
輸出結果為:f=open("test.txt","r")
forline
in f:
print (line)
f.close()
那為什麼要關閉檔案呢?this
is first line
this
is second line
this
is third line
由於記憶體的訪問速度要遠遠快於磁碟的訪問速度,python分配了一塊叫做緩衝區的記憶體空間,用來臨時儲存將要寫入磁碟的資料.一旦緩衝區滿了,或者檔案被關閉了,緩衝區裡的內容就會被寫入磁碟.所以在操作結束後,必須關閉檔案,以確保所有的資料在物理層面上傳輸到磁碟中.
寫二進位制檔案#以只寫的模式開啟乙個當前路徑下的test.txt檔案,並將其賦值給變數f
#訪問模式"w"表示對乙個檔案進行寫入操作,如果該檔案已存在則將其覆蓋,如果不存在則建立該檔案
f=open("test.txt","w")
f.write("hello,world") #使用write()方法將括號中的字串("hello,world")寫入到該檔案內
f.close
#關閉檔案
output=open("test","wb")
附上訪問模式的說明:
複製檔案訪問模式 說明
r 以唯讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式。
w 開啟乙個檔案只用於寫入。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。
a 開啟乙個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。
rb 以二進位制格式開啟乙個檔案用於唯讀。檔案指標將會放在檔案的開頭。這是預設模式。
wb 以二進位制格式開啟乙個檔案只用於寫入。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。
ab 以二進位制格式開啟乙個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入。
r+ 開啟乙個檔案用於讀寫。檔案指標將會放在檔案的開頭。
w+ 開啟乙個檔案用於讀寫。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。
a+ 開啟乙個檔案用於讀寫。如果該檔案已存在,檔案指標將會放在檔案的結尾。檔案開啟時會是追加模式。如果該檔案不存在,建立新檔案用於讀寫。
rb+ 以二進位制格式開啟乙個檔案用於讀寫。檔案指標將會放在檔案的開頭。
wb+ 以二進位制格式開啟乙個檔案用於讀寫。如果該檔案已存在則將其覆蓋。如果該檔案不存在,建立新檔案。
ab+ 以二進位制格式開啟乙個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。如果該檔案不存在,建立新檔案用於讀寫。
將test.txt檔案複製到本路徑下,檔案名叫hello.txt
複製大檔案old_file= open("test.txt","r") #首先開啟要複製的檔案,並將結果賦值給變數old_file
new_file=open("hello.txt","w") #然後在本路徑下建立乙個新的檔案名叫hello.txt,並將結果賦值於變數new_file
content=old_file.read() #從test.txt檔案中讀取資料,並將其結果賦值給變數content
new_file.write(content) #將test.txt檔案的內容寫入到hello.txt檔案內
old_file.close() #關閉開啟的test.txt檔案
new_file.close() #關閉開啟的hello.txt檔案
檔案相關操作old_file= open("test.txt","r") #首先開啟要複製的檔案,並將結果賦值給變數old_file
new_file=open("hello.txt","w") #然後在本路徑下建立乙個新的檔案名叫hello.txt,並將結果賦值於變數new_file
while true: #多次迴圈,每次讀取固定的長度,避免一次讀取太多導致記憶體爆滿
content=old_file.read(1024) #從test.txt檔案中讀取資料,設定一次讀取1024位元組的字元,並將其結果賦值給變數content
iflen(content)==0:
break
new_file.write(content) #將test.txt檔案的內容寫入到hello.txt檔案內
old_file.close() #關閉開啟的test.txt檔案
new_file.close() #關閉開啟的hello.txt檔案
python內建的os模組可以呼叫作業系統提供的介面函式,對檔案或目錄進行操作(實際上作業系統是不允許應用程式直接訪問和操作檔案和目錄的,讀寫檔案就是請求作業系統開啟乙個檔案物件,通常稱為檔案描述符。然後,通過作業系統提供的介面從這個檔案物件中讀取資料,或者把資料寫入這個檔案物件。)
1,檔案重新命名
os模組中的rename()方法可以完成對檔案的重新命名操作
格式為:rename (原檔名,新檔名)
2,刪除檔案import os #匯入os模組,匯入之後才可以使用該模組中的方法
os.rename("test.txt","test2.txt") #將當前路徑下的test.txt檔案重新命名為test2.txt
os模組中的remove()方法可以完成對檔案的刪除操作
remove(需要刪除的檔名)
3,建立/刪除資料夾import os
os.remove("test.txt") #刪除當前路徑下的test.txt檔案
4,獲取當前目錄的絕對路徑import os
os.mkdir("test") #使用os模組中的mkdir方法建立資料夾
os.rmdir("test") #使用os模組中的rmdir方法刪除檔名
5,改變檔案建立的預設路徑import os
os.getcwd() #使用os模組中的getcwd方法獲取當前目錄的絕對路徑
6,列出所制定的目錄下的檔案,類似於windows下的dir,linux下的ls,但以列表的形式列出import os
os.chdir("../") #改變建立檔案時的預設路徑為當前目錄的上一層目錄
輸出結果為:import os
a = os.listdir("./") #列出當前目錄下的檔案,將結果賦值給變數a
print(a)
['.idea', 'demo1.py', 'demo2.py', 'demo3.py', 'hello.txt', 'test.txt']
#在該列表中每乙個字串即就是所指定路徑下的檔名
python簡述檔案 1 概述
1.概述 本參考手冊是對 python 程式語言的描述。並不適宜作為教程使用。在語言參考文件裡加入過多的實現細節是很危險的 具體實現可能發生改變,對同一語言的其他實現可能使用不同的方式。而在另一方面,cpython 是得到廣泛使用的 python 實現 然而其他一些實現的擁護者也在增加 其中的特殊細...
Python字典增刪操作技巧簡述
python程式語言是一款比較容易學習的計算機通用型語言。對於初學者來說,首先需要掌握的就是其中的一些基礎應用。比如今天我們為大家介紹的python字典的相關操作,就是我們在學習過程中需要熟練掌握的技巧。python字典 dictionary 是一種對映結構的資料型別,由無序的 鍵 值對 組成。字典...
Python字典增刪操作技巧簡述
python程式語言是一款比較容易學習的計算機通用型語言。對於初學者來說,首先需要掌握的就是其中的一些基礎應用。比如今天我們為大家介紹的python字典的相關操作,就是我們在學習過程中需要熟練掌握的技巧。python字典 dictionary 是一種對映結構的資料型別,由無序的 鍵 值對 組成。字典...