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


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

文件的操作在今后的Python開發中也是使用非常頻繁的。

 

先說下對文件操作的流程

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

 

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

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

 

打開文件模式

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

那如果想要寫入怎么辦,這里就要用到打開模式了。

打開文件是模式有如下:

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

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

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

#我們只需要在open的時候加上‘w’,就可以對文件進行寫入操作了

 

 

如果想同時讀取又可以寫入怎么辦?打開模式中有個‘"+"表示可以同時讀寫文件

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

還有一個“U”表示在讀取時,可以將 \r\n自動轉換成 \n

  • rU
  • r+U

"b"表示處理二進制文件,如果我們打開的文件不是文本,而且其他類型的文件就會用到這個模式

(使用場景: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
...
等等之類的方法,在大家實際使用的時候在具體了解吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM