初學Python——檔案操作

來源:互聯網
上載者:User

標籤:清空檔案   with open   取資料   字串   它的   write   字元   速度   family   

一、檔案的開啟和關閉

1.常用的開啟關閉語句

f=open("yesterday","r",encoding="utf-8")   #開啟檔案f,close()   #關閉檔案

第一行是開啟名為“yesterday”的檔案,唯讀屬性,編碼方式為utf-8。如果沒有指定檔案開啟檔案,預設唯讀“r”,如果沒有指定編碼方式可能會部分亂碼。

第二行是關閉檔案

2.with as語句

目的:為了防止程式員開啟檔案後忘記關閉檔案

with open("yesterday","r",encoding="utf-8") as f:    <程式碼片段>

3.檔案開啟檔案

開啟檔案 是否可讀 是否可寫 是否可建立 是否會覆蓋 特點 建議
r 唯讀,安全 推薦
r+ 追加 有時部分覆蓋 容易寫入出錯 不建議
w 全覆蓋 唯寫 謹慎
w+ 全覆蓋

唯寫

開啟檔案即清空

不建議

資料非常不安全

a 追加 追加不覆蓋 推薦
a+ 追加 全能且安全 推薦

說明一下:

(1)r:如果只有讀取資料的需求,建議用這種,杜絕了對資料破壞的可能。

(2)r+:之所以不推薦它是因為,寫入資料的行為難以捉摸,並且可能會因此破壞資料,造成損失。如果不是十分清楚它的習性,不要用它。

寫入方式:有時覆蓋,有時追加。

當寫入操作前一步是讀取的時候,這時候不會覆蓋資料,在最後追加:

f=open("yesterday3","r+",encoding="utf-8")print(f.readline())  #讀取一行資料f.write("nihao")     #寫入資料f.close()

執行前的檔案:

執行後的檔案:

當寫入操作前一步不是讀取的時候,覆蓋寫入資料,從游標處開始覆蓋部分資料:

f=open("yesterday3","r+",encoding="utf-8")print(f.tell())          #擷取游標當前位置f.write("nihao")    #寫入資料f.close()

執行後:

所以,盡量不要用它

(3)w:只能寫入資料,並且覆蓋之前的全部資料。由於會對之前資料造成丟失,所以使用它時要謹慎。可建立的意思是如果指定開啟的檔案不存在,則建立一個檔案。

(4)w+:不建議此種方式。每次開啟檔案都會對資料進行清空,即使不進行任何操作。可以這樣理解:每次開啟時,都會重新建立一個同名檔案並覆蓋,初始情況下當然是空的。可讀可寫可建立。

(5)a:可追加,可建立。保證了資料的安全,不會覆蓋之前的資料

(6)a+:全能型選手,啥活都能幹,而且資料安全,不會覆蓋。但是有個特點,檔案開啟時游標起始位置在最後面,所以導致讀取不到資料。(其他方式開啟檔案時,游標都在開頭位置)

來測試一下:

f=open("yesterday3","a+",encoding="utf-8")print(f.tell())           #擷取游標當前位置print(f.readline())   #讀取一行資料f.close()

運行結果:

當前游標位置327(字元),沒有讀取到資料。怎麼辦?將游標移動到開頭就好了

f.seek(0)  #將游標移動到開頭位置

順利運行:

4. f  是什嗎?

f 叫做檔案控制代碼。是檔案的記憶體對象,包含檔案的大小、檔案名稱、硬碟中的起始位置等資訊封裝成了一個控制代碼。

二、檔案的寫和讀

1.寫

f.write("123\n") 

寫入資料時,只能以字元形式,如果是int會出錯,並且分行符號“\n”也佔有相應的字元。

2.讀

注意:任何時候進行讀取操作,都要看清楚當前游標的位置,才能讀到想要的資料。

①將所有資料一次性全部讀出來(一般不用,不適合讀取大檔案)

data=f.read() #data是一個字串變數print(data)print(f.read())    #如果這三行代碼放到一起,會發現第三行代碼讀不出來資料,而且也沒有報錯,實際上是沒有注意游標的位置,
要解決很簡單,只要將游標移動到初始位置就好了

②唯讀取有限個字元

print(f.read(5)) #從游標處開始唯讀取5個字元

③讀取一行資料

print(f.readline())  #從游標處開始讀取一行資料

④readlines()

也是讀取全部資料,但有所不同

a=f.readlines() 

a是一個列表,檔案中每一行資料都轉化成列表的元素。

⑤迴圈讀取資料

for i in range:   print(i)

一行一行地讀取資料,讀完整個檔案。推薦用這種方式,記憶體中始終只儲存一行的資料,可以讀大檔案。

三、其他常用操作

1.查看當前游標位置

print(f.tell())

2.移動游標位置

f.seek(0)    #將游標位置移動到開頭f.seek(10)  #移動到第10個字元的位置

3.列印檔案的編碼

print(f.encoding)

4.判斷游標是否可以移動

print(f.seekable())

在linux系統一切皆檔案,終端裝置檔案不能移動游標

5.強制重新整理

print(f.flush())

功能是,強制、立即將在此之前寫入的資料寫入到硬碟中。

在電腦中,往硬碟裡寫入資料通常不是當即發生的,寫入(儲存)後,作業系統會給人反饋說,已經將資料存了進去,但實際並沒有立即寫入,而是現將其存入系統緩衝中,等到作業系統認為合適的時候再一次性寫入進去。至於為什麼這麼做,我掌握到的有兩點原因:一是提高系統運作效率,由於硬碟讀寫速度慢,整個程式會因為這個操作變得很慢,卡在這裡,整個系統的運作效率很低;二是保護硬碟,使用者可以很頻繁地執行寫入操作,如果硬碟也這麼做(跟使用者同步),硬碟壽命會大大降低。

所以,flush()方法的作用是立刻重新整理硬碟的資料,將之前寫入的資料立刻寫入硬碟中。

6.判斷檔案是否關閉

當同時開啟的檔案很多時,可能不太清楚哪些檔案關閉了,哪些檔案沒有關,可以用closed()方法檢測一下

print(f.closed())

7.清除檔案資料

f.truncate(10)

除了前10個字元,清空檔案所有資料(檔案開啟檔案不可以是“r”,最好是“a”)

清除操作跟當前游標位置無關。如果括弧內不寫資料,不做任何操作

四、二進位檔案

開啟檔案:“rb”(唯讀),“wb”(唯寫),“ra”(追加)

什麼時候會用到二進位開啟檔案呢?

1.網路傳輸只能用二進位(至少在Python3.0)

2.操作二進位檔案(如果用字元形式可能會出錯)

 

初學Python——檔案操作

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.