摘要:二文件操作操作文件時,一般需要經(jīng)歷如下步驟打開文件文件句柄文件路徑模式注中打開文件有兩種方式,即和,本質(zhì)上前者在內(nèi)部會調(diào)用后者來進行文件操作,推薦使用。
一 介紹
計算機系統(tǒng)分為:計算機硬件,操作系統(tǒng),應(yīng)用程序三部分。
我們用python或其他語言編寫的應(yīng)用程序若想要把數(shù)據(jù)永久保存下來,必須要保存于硬盤中,這就涉及到應(yīng)用程序要操作硬件,眾所周知,應(yīng)用程序是無法直接操作硬件的,這就用到了操作系統(tǒng)。操作系統(tǒng)把復雜的硬件操作封裝成簡單的接口給用戶/應(yīng)用程序使用,其中文件就是操作系統(tǒng)提供給應(yīng)用程序來操作硬盤虛擬概念,用戶或應(yīng)用程序通過操作文件,可以將自己的數(shù)據(jù)永久保存下來。
文件路徑:
相對路徑:Linux和os x中用/,Windows中用,該位置相對于當前程序所在目錄
絕對路徑:同上,讀取系統(tǒng)任何地方文件,由于在Python中是轉(zhuǎn)義符建議路徑前加上r
有了文件的概念,我們無需再去考慮操作硬盤的細節(jié),只需要關(guān)注操作文件的流程:
1、打開文件,得到文件句柄并賦值給一個變量
f=open("a.txt","r",encoding="utf-8") # 默認打開模式就為r
2、通過句柄對文件進行操作
data=f.read()
3、關(guān)閉文件
f.close() #操作過程存儲在內(nèi)存與緩存中,在程序結(jié)束或者close之后寫入磁盤
上下文與回收
打開一個文件包含兩部分資源:操作系統(tǒng)級打開的文件+應(yīng)用程序的變量。在操作完畢一個文件時,必須把與該文件的這兩部分資源一個不落地回收,回收方法為:
1、f.close() #回收操作系統(tǒng)級打開的文件
2、del f #回收應(yīng)用程序級的變量
注意:其中del f一定要發(fā)生在f.close()之后,否則就會導致操作系統(tǒng)打開的文件還沒有關(guān)閉,白白占用資源,而python自動的垃圾回收機制決定了我們無需考慮del f,這就要求我們,在操作完畢文件后,一定要記住f.close()。如果程序存在bug,導致close()未執(zhí)行,文件不會關(guān)閉。
whit管理上下文:
with open("a.txt","w") as f: pass with open("a.txt","r") as read_f,open("b.txt","w") as write_f: data=read_f.read() write_f.write(data)
注意:當with代碼塊執(zhí)行完畢時,內(nèi)部會自動關(guān)閉并釋放文件資源。open()返回的文件對象只在with內(nèi)可用,如果要在外部訪問需將with內(nèi)創(chuàng)建列表,再從外部使用
文件編碼
f=open(...)是由操作系統(tǒng)打開文件,那么如果我們沒有為open指定編碼,操作系統(tǒng)會用自己的默認編碼去打開文件,在windows下是gbk,在linux下是utf-8。
f=open("a.txt","r",encoding="utf-8")二 文件操作
操作文件時,一般需要經(jīng)歷如下步驟:
1、打開文件
文件句柄 = file("文件路徑", "模式")
注:python中打開文件有兩種方式,即:open(...) 和 file(...) ,本質(zhì)上前者在內(nèi)部會調(diào)用后者來進行文件操作,推薦使用 open。
打開文件的模式有:
打開文件的模式有(默認為文本模式):
r :只讀模式【默認模式,文件必須存在,不存在則拋出異常】
w :只寫模式【不可讀;不存在則創(chuàng)建;存在則清空原內(nèi)容寫入新內(nèi)容】
a :追加寫模式【不可讀;不存在則創(chuàng)建;存在則在光標位置追加內(nèi)容】
非文本文件,我們只能使用b模式,"b"表示以字節(jié)的方式操作(無需考慮文本、圖片、視頻的格式):
rb :只讀模式
wb :修改并讀取
ab :追加字節(jié)
注意:以b方式打開時,讀取到的內(nèi)容是字節(jié)類型,寫入時也需要提供字節(jié)類型,不能指定編碼
其他模式
"+" :表示可以同時讀寫某個文件
r+ :讀寫【可讀,可寫】#追加寫,文件光標位置處,默認在開始位置
w+ :寫讀【可讀,可寫】#清除覆蓋原有內(nèi)容,默認光標位置在開始,用seek讀
a+ :寫讀【可讀,可寫】#不清空在最后位置追加,用seek讀。
x :只寫模式【不可讀】#不存在則創(chuàng)建,存在則報錯
x+ :寫讀【可讀,可寫】
"U" :表示在讀取時,將 r n rn自動轉(zhuǎn)換成 n (與r或r+模式同使用)
rU r+U操作文件方法
import sys #系統(tǒng)函數(shù)
print(f.tell()) #返回光標位置
f.read() #從光標初讀取所有內(nèi)容,并移動到末尾返回空字符串即空行
f.read(3) #文本模式讀三個字符,b模式讀取3個字節(jié)
f.readline() #讀取一行內(nèi)容,光標移動到第二行首部
f.readlines() #讀取所有行內(nèi)容,存放于列表中,在循環(huán)迭代時獲取
f.xreadlines() #可用于逐行讀取文件,非全部
f.readinto() #讀取到緩沖區(qū),不要用,將被遺棄
f.seek(0) #指定文件中指針位置,0代表開始位置,不同于read。
f.seek(3,2) #從第三個字節(jié)開始打印,seek應(yīng)用,如斷點續(xù)傳
f.tell() #獲取當前指針位置
f.truncate() #截斷文件,保留指定之前的數(shù)據(jù)。
注意:文件的打開方式必須可寫,不能用w或w+等方式打開,因為那樣直接清空文件了,所以truncate要在r+或a或a+等模式下測試效果.
f.write(“xx”) #文本模式寫入緩存,b模式需要加.encode("utf-8")
f.flush() #立刻從內(nèi)存刷到磁盤中及屏幕上
f.time.sleep(100)#100秒后寫入磁盤
f.close() #寫入磁盤或程序結(jié)束后寫入磁盤
f.stdout.write(“xx”) #向屏幕輸出內(nèi)容,代表文件寫、輸出,先進了緩存
f.write("1111n222n") #針對文本模式的寫,需要自己寫換行符
f.write("1111n222n".encode("utf-8")) #針對b模式的寫,需要自己寫換行符
f.writelines(["333n","444n"]) #文件模式,字符串寫入文件
f.writelines([bytes("333n",encoding="utf8"),"444n".encode("utf-8")]) #b模式
f.readable() #文件是否可讀
f.writable() #文件是否可寫
f.close() #關(guān)閉文件
f.closed #文件是否關(guān)閉
f.encoding #如果文件打開模式為b,否則沒有該屬性
f.fileno() #文件描述符
f.isatty() #判斷文件是否是同意tty設(shè)備
f.next() #獲取下一行數(shù)據(jù),不存在時報錯
練習:打印一首詩
f 讀取一行,執(zhí)行完后被回收,優(yōu)化內(nèi)存
利用b模式,編寫一個cp工具,要求如下:
1. 既可以拷貝文本又可以拷貝視頻,圖片等文件
2. 用戶一旦參數(shù)錯誤,打印命令的正確使用方法,如usage:cp source_file target_file
請輸入代碼
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/41956.html
?前言 在Python寫代碼做項目時,我們往往需要對多個文件進行操作,在現(xiàn)在的源代碼文件中怎么導入其他文件?怎么對其他文件進行操作?這都是經(jīng)常要面臨的問題,尤其是爬蟲,爬到的數(shù)據(jù)放在哪里?用到的時候怎么調(diào)出來? 這就涉及到了Python的文件操作知識了,我們不可能永遠都只會在一個源文件上做所有的操作,這也是必須掌握的一個知識板塊。 與此同時,我的Python新手入門教程系列文章也已經(jīng)快更新完了,歡...
摘要:二進制日志是記錄對數(shù)據(jù)發(fā)生或潛在發(fā)生更改的語句,并以二進制的形式保存。刪除配置文件刪除配置文件配置文件支持刪除操作。在配置文件列表頁選中需要刪除的配置文件,選中刪除即可完成刪除操作。UCloud MySQL云數(shù)據(jù)庫操作指南 基本操作 啟動MySQL實例 如果要啟動處于關(guān)閉狀態(tài)的MySQL實例,首先選擇需要啟動的MySQL實例,在列表右側(cè)點擊啟動按鈕,彈出的確認對話框選擇確定...
摘要:文件的基本操作編碼不同編碼之間的二進制是不能互相識別的。返回值有幾種情況分別是沒有返回值返回一個值返回多個值。函數(shù)定義計算的長度函數(shù)調(diào)用因為沒有返回值,此時的為只寫,后面不寫其他內(nèi)容,也會返回,但是遇到會終止整個函數(shù)。 文件的基本操作 編碼 1.不同編碼之間的二進制是不能互相識別的。2.對于文件的存儲,及傳輸 不能是unicode的編碼。 bytes:內(nèi)部編碼格式(非unicode) ...
閱讀 5265·2021-09-22 15:59
閱讀 1856·2021-08-23 09:42
閱讀 2561·2019-08-29 18:42
閱讀 3444·2019-08-29 10:55
閱讀 2058·2019-08-27 10:57
閱讀 1759·2019-08-26 18:27
閱讀 2722·2019-08-23 18:26
閱讀 2912·2019-08-23 14:40