Python學習,第七課 - 文件操做

Python中對文件的相關操做詳解

文件的操做在從此的Python開發中也是使用很是頻繁的。linux

 

先說下對文件操做的流程

  1. 打開文件,獲得文件的一個句柄,賦值給一個變量
  2. 而後經過句柄對文件進行操做(內容的增、刪、改、查)
  3. 最後要關閉文件(有打開就要有關閉,不然文件會一直被暫用,直到程序運行結束。)

 

文件的基本操做
#按照上面所說的流程
f = open('demo.txt')#1.打開文件,句柄賦值給f
data = f.read()#2.對文件操做,讀取文件內容
print(data)#打印文件
f.close()#3.關閉文件

#按照上面的流程,就完成了對文件的基本操做

 

打開文件模式

前面咱們用打開文件,並無地方選擇打開的模式,其實默認就是使用了「只讀模式」(r),在只讀模式下咱們只能讀取文件內容,而不能對文件進行寫入,追加等操做。windows

那若是想要寫入怎麼辦,這裏就要用到打開模式了。編碼

打開文件是模式有以下:spa

  1.  r,只讀模式(默認)
  2.  w,只寫模式。(不可讀,不存在文件時則建立,存在時則刪除原有內容寫入新內容。)
  3.  a,追加模式。(可讀,不存在文件時則建立,存在時則在原有內容上追加新內容。)

那麼如何使用呢?其實很簡單,下面寫一個例子:code

f = open('demo.txt','w')
f.write('test')
f.close()

#咱們只須要在open的時候加上‘w’,就能夠對文件進行寫入操做了

 

 

若是想同時讀取又能夠寫入怎麼辦?打開模式中有個‘"+"表示能夠同時讀寫文件blog

  1. r+,可讀寫文件。(可讀,可寫,可追加)
  2. w+,寫讀
  3. a+,和a是同樣的

還有一個「U」表示在讀取時,能夠將 \r\n自動轉換成 \n內存

  • rU
  • r+U

"b"表示處理二進制文件,若是咱們打開的文件不是文本,並且其餘類型的文件就會用到這個模式utf-8

(使用場景:FTP發送上傳的文件,linux中能夠忽略,windows處理二進制文件時需標註)資源

  • rb
  • wb
  • ab

 

打開文件編碼

前面咱們都沒有使用到打開編碼,其實默認都是 「gbk」開發

若是咱們文件是utf-8編碼的格式,且內容中存在中文,則讀取的時候不會報錯能夠正常讀取,

若是文件是utf-8編碼格式的,內容中添加了中文,這個時候咱們默認編碼打卡就會報錯,以下:

UnicodeDecodeError: 'gbk' codec can't decode byte 0xac in position 5: illegal multibyte sequence

這個時候後咱們就要用到 encoding 對打開文件編碼格式的修改:

f = open('demo.txt','r+', encoding='utf-8')

#加上encoding='utf-8'就不會出現報錯,或者中文亂碼了

 

 

大文件操做

前面咱們讀取文件內容,都是一次性讀取所有內容,這樣操做若是文件小還行,若是文件特別大,內容特別多,好比1G、10G等,則會讓咱們的電腦卡死,甚至內存溢出。

針對大文件的操做,咱們其實能夠每次只讀一行,讀完一行在內存中就刪除

f = open('demo.txt','r+', encoding='utf-8')

#只要使用這種循環,讀一條,刪一條,內存中只保存一行數據
for line in f:
     print(line)
f.close()
#此方法針對大文件操做效果顯著

 

 

文件修改

上面咱們用追加模式打開,而後寫入文件就能夠把追加的內容寫入到文件中了。

若是要修改和刪除,是否是用讀寫模式,把內容讀出來,修改或刪除內容,而後在重新寫入到文件中,就能夠實現刪除和修改了。

可是,咱們剛剛提到了大文件,假設20G的文件,你不可能所有讀出來,在修改或刪除相應內容以後,在從新寫入文件,你的程序直接卡死了。那怎麼辦呢?

其實仍是用到上面大文件操做的方式,咱們一條一條讀,而後一條一條寫

#思路就是一行一行讀出源文件內容,在一行一行寫入新的文件中
f = open('demo.txt', 'r+', encoding='utf-8')#原文件
f2 = open('demo2.txt', 'a', encoding='utf-8')#修改後保存的新文件

for line in f:
    #判斷若是行中有出現'zhangsan'則修改爲'lisi'
    if 'zhangsan' in line:
        line = line.replace('zhangsan', 'lisi')
    #判斷若是行中有出現'wangwu'則跳過,既這行不添加到新文件,至關於刪除了這行
    elif 'wangwu' in line:
        continue
    f2.write(line)#最後修改過的內容一行一行寫入到新的文件中
    print(line)

f.close()
f2.close()

 

 

with 語句

前面咱們說了,文件打開就要關閉。可是咱們常常忘記關閉,怎麼辦呢?

Python提供了一個 with語句,使用方式:

#使用with語句,當with代碼塊執行完畢時,內部會自動關閉並釋放文件資源。
with open('demo.txt', 'r', encoding='utf-8') as f:
    pass

#在Python2.7之後,with還同時支持操做多個文件
with open('demo.txt', 'r', encoding='utf-8') as f, open('demo2.txt', 'r', encoding='utf-8') as f2:
    pass

 

 

關於Python中的文件操做經常使用的方法就寫這麼多,還有一些如

tell
seek
seekable...等等之類的方法,在你們實際使用的時候在具體瞭解吧。
相關文章
相關標籤/搜索