Python學習:7.檔案操作

來源:互聯網
上載者:User

標籤:AC   添加   技術分享   代碼塊   讀寫   write   encode   通過   行資料   

檔案操作

我們曾將聽過一個問題,將大象放入冰箱分為三步:1、開啟冰箱門,2、將大象放進去,3、關上冰箱門。今天我們要講的Python檔案操作的步驟就像將大象放入冰箱的步驟一樣。

使用Python操作檔案的基本步驟:

  • 開啟檔案
  • 對檔案內容進行操作(讀取檔案資訊,向檔案中寫入資訊等)
  • 關閉檔案
一、開啟檔案

在上一篇的內建函數介紹中,我們提到了open這個函數,這個函數的作用就是開啟一個檔案。

格式一

檔案控制代碼 = open(檔案路徑,開啟格式,編碼)

開啟檔案時,需要指定檔案路徑和以何種方式開啟檔案,開啟後,即可擷取該檔案控制代碼,如後通過此檔案控制代碼對該檔案操作。

f = open("c:/asd.txt","r",encode=‘utf-8‘)    #開啟c盤下的asd.txt檔案date = f.read()    #讀取檔案內容f.close()    #關閉檔案print(date)    #輸出檔案內容

格式二

with open(檔案路徑,開啟格式,編碼),使用這個開啟檔案不用再最後使用close()關閉檔案,因為使用這個with自動進行檔案關閉,但是這個需要你檔案的操作都在代碼塊中,注意縮排。

with open("c:/asd.txt",encoding=‘utf-8‘) as f:    data = f.read()print(data)

代開檔案的各種格式

開啟檔案時,需要指定檔案路徑和以何種方式開啟檔案,開啟後,即可擷取該檔案
控制代碼,如後通過此檔案控制代碼對該檔案操作。
開啟的模式有:

r,唯讀檔案,【預設】w,唯寫檔案,【不可讀,不存在建立;存在則清空內容】x,唯寫檔案,【不可讀,不存在建立,存在則報錯】a,追加模式,【不可讀,不存在建立,存在則只追加內容】

"+"表示可以同時讀寫某個檔案

r+,讀寫【可讀,可寫】w+,寫讀【可讀,可寫】x+,寫讀【可讀,可寫】a+,寫讀【可讀,可寫】

"b"表示以位元組的方式操作

rb或r+bwb或w+bxb或w+bab或a+b

以b方式開啟時,讀取到的內容是位元組類型,寫入時也需要寫入的是位元組類型。

二、對檔案內容進行操作

使用一般格式開啟檔案

1、使用唯讀格式開啟檔案的時候,進行檔案寫入就會報錯。

2、使用寫入格式代開檔案的時候,會清除原有內容,然後重新寫入內容。

f = open("asd","w")#清空原有檔案內容f.write("asd")#重新寫入f.close()

3、使用唯寫模式開啟檔案,沒有檔案就建立,有檔案的時候就報錯。

然後我們再次使用上一條命令,就會發生報錯,因為檔案存在了。

4、追加模式開啟檔案,當檔案不存在的時候建立檔案,當檔案存在的時候在檔案結尾追加內容。

f = open("asd","a")#不存在建立,存在追加f.write("asd")f.close()

使用位元組格式開啟檔案

1、唯讀格式

f = open("asd","rb")#在這裡開啟時是以位元組方式讀,所以不需要加encoding="utf-8"data = f.read()  f.close()print(type(data))輸出結果:<class ‘bytes‘>

2、唯寫格式

f = open("asd","wb")data = f.write(bytes("中國",encoding = "utf-8"))f.close()    #用位元組方式寫入時,需要把字串轉換為位元組
兩種開啟檔案的內部編碼機制

普通格式

  python內部將010101自動轉換為字串(因為在本質上在在硬碟裡存的就是0101,所以在讀取資料時也是0101,而普通開啟時,會自動將位元組轉換為字串預設使用utf-8編而在轉字串是我們可以指定什麼編碼格式轉成字串)。

010101======>python解譯器(轉換為字串)=====>程式員看到

位元組格式

  用位元組方式開啟時位元組直接給到程式員,沒有編譯過程,所以不能添加encoding =""在你寫入是,如果你寫入的是字串,你需要吧字串轉換為010101,不然會報錯因為位元組方式開啟沒有編譯過程,儲存時也不會自動編譯成0101所以需要自己吧字串轉換為位元組f.write(bytes("中國",encoding = "utf-8")),才能儲存。

010101======>程式員看到

樣本

使用位元組格式讀取檔案,檔案裡原來儲存的是"中國"。

f = open("asd","rb")data = f.read()f.close()print(data)data1 = str(data,encoding = "utf-8")#如果是用python儲存的就是utf-8,如果是自己在記事本寫的可能需要用gbkprint(data1)輸出結果:b‘\xe4\xb8\xad\xe5\x9b\xbd‘中國

使用位元組格式寫入檔案,檔案中儲存的還是"中國"。

f = open("asd","wb")str_a = "中國"bytes_a = bytes(str_a,encoding="utf-8")f.write(bytes_a)print(bytes_a)f.close()輸出結果:b‘\xe4\xb8\xad\xe5\x9b\xbd‘

使用一般格式輸入輸出的都是字串,使用位元組格式輸入輸出的都是位元組,在我們使用的時候一般不使用位元組格式進行檔案讀寫。

有關讀寫檔案內部指標問題

f = open("world.txt", "r+",encoding=‘utf-8‘)data = f.read()print(type(data), data)f.write("地球村")a = f.read()print(type(a), a)# 在這裡輸出的是空的,在讀寫時有一個指標,你讀一個,指標就向後移一個,追加一個字元就再向後移一個,等你再次輸出是,指標就指向空的地方,所以輸出是空的print(f.tell())#輸出指標位置,位元組,一個漢字三個位元組f.close()輸出結果:<class ‘str‘> 地球<class ‘str‘> 9

相關樣本:

檔案原內容:alexsel

f = open("name.txt", "r+")data = f.read(3)print(type(data), data)print(f.tell())     #輸出當前指標位置f.write("地球村")print(f.tell())a = f.read()    print(type(a), a)print(f.tell())f.close()輸出結果:<class ‘str‘> ale313<class ‘str‘> xsel13

我們指標之前的字元進行讀取怎麼辦,我們可以使用seek()調整指標位置。

f = open("name.txt","w+",encoding="utf-8")f.write("三顧茅廬")f.seek(0) #這個可以將指標移動到最開始(0),不移動,在輸出是就的是空的data = f.read()f.close()print(data)輸出結果:三顧茅廬

使用追加模式開啟檔案的時候,檔案指標直接在最後。

f = open("asda.log","a+",encoding="utf-8")print(f.tell()) #使用追加的時候,開啟檔案的時候,指標直接在最後data = f.read() print(data) #指標直接在最後,所以這裡輸出為空白f.seek(0)data = f.read()print(data)f.close()輸出結果:7alexsel
三、檔案關閉

之前我們在檔案操作中一直在使用,使用close()進行檔案關閉,不對檔案檔案關閉會導致出錯。

檔案操作中使用到的方法

file為檔案控制代碼

file.close()
方法重新整理緩衝區裡任何還沒寫入的資訊,並關閉該檔案,這之後便不能再進行寫入。

file.write()
向檔案中寫入資料

file.fulsh() 
重新整理檔案內部緩衝區

f1 = open("asda.log","r+",encoding="utf-8")f1.write("啊啊啊啊啊")f1.flush()f1.seek(0)print(f1.read())輸出結果:
啊啊啊啊啊

當檔案還沒有關閉時,這些東西就還沒有存到硬碟裡,只是在記憶體裡就像你在記事本輸入了一串字元但是沒有儲存一樣,只是在記憶體裡,flush()功能就是把寫入的字元進行儲存,就像記事本裡的儲存一樣,把記憶體的內容重新整理到硬碟裡。

 

file.name

擷取操作檔案的檔案名稱

f = open("name.txt","r+",encoding="utf-8")ut = f.nameprint(ut)輸出結果:name.txt

 

file.readable()
判斷開啟檔案是否可讀

f1 = open("asda.log","r+",encoding="utf-8")pd=f1.readable()print(pd)輸出結果:True

 

file.readline()
僅讀取一行資料(自動把指標放在第一行末尾,再讀時,就是從第二行開始)

#問價內容:第一行是三顧茅廬,第二行是alexself1 = open("name.txt","r+",encoding="utf-8")data = f1.readline()print(data)data1 = f1.readline()print(data1)f1.close()輸出結果:三顧茅廬alexsel


file.seekable()
指標是否可操作

f1 = open("name.txt","r+",encoding="utf-8")ut = f1.seekable()print(ut)f1.close()輸出結果:True
總結:
  • 不管是讀檔案還是寫檔案,操作完成後都要調用close()來關閉檔案
  • 但是調用with… as就可以省去close()了
  • 可以指定讀取和寫入檔案編碼方式,就是在對用函數中加入encoding=’xxx’
  • 我們可以使用各種方法方便我們對檔案的操作
  • 讀寫檔案是我們需要注意一下指標的位置

今天的Python的檔案操作就到這裡,這裡僅僅是簡單的學習,以後我們做簡單的項目的時候會加深練習。

Python學習:7.檔案操作

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.