python中的文件操作: 包括文件的打開方式和文件的修改


python 文件操作:

文件一般分為文本文件和二進制文件。

文本文件:

由單一特定編碼組成的文件,如UTF-8編碼

由於存在編碼,也被看成是存儲着的長字符串

適用於例如:.txt文件、.py文件等

二進制文件:

直接由比特0和1組成,沒有統一字符編碼

一般存在二進制0和1的組織結構,即文件格式

適用於例如:.png文件、.avi文件等

正常的文件操作都分三步走:

打開文件
操作文件
關閉文件

# 1. 打開文件,得到文件句柄並賦值給一個變量
f=open('a.txt','r',encoding='utf-8') #默認打開模式就為r

#2. 通過句柄對文件進行操作
data=f.read()

#3. 關閉文件
f.close()

文件的打開模式:

variety meaning
'r' 只讀模式,默認值,如果文件不存在,返回輸出異常
'w' 覆蓋寫模式,文件不存在則創建,存在則完全覆蓋
'x' 創建寫模式,文件不存在則創建,存在則返回FileExistsError
‘a’ 追加寫模式,文件不存在則創建,存在則在文件最后追加內容
‘b’ 二進制文件模式
‘t’ 文本文件模式,默認值
‘+’ 與r/w/x/a一同使用,在原功能基礎上增加同時讀寫功能

 

 

 

 

 

 

 

 

 

 

 

 

 

#1. 打開文件的模式有(默認為文本模式): r ,只讀模式【默認模式,文件必須存在,不存在則拋出異常】 w,只寫模式【不可讀;不存在則創建;存在則清空內容】 a, 之追加寫模式【不可讀;不存在則創建;存在則只追加內容】 #2. 對於非文本文件,我們只能使用b模式,"b"表示以字節的方式操作
(而所有文件也都是以字節的形式存儲的,使用這種模式無需考慮文本文件的字符編碼、
圖片文件的jgp格式、視頻文件的avi格式)
rb wb ab 注:以b方式打開時,讀取到的內容是字節類型,寫入時也需要提供字節類型,不能指定編碼

文件內容的讀取:

variety meaning
f.read(size=-1) 讀入全部內容,如果給出參數,讀入前size長度
f.readline(size=-1) 讀入一行內容,如果給出參數,讀入該行前size長度
f.readlines(hint=-1) 讀入文件所有行,以每行為元素形成列表,如果給出參數,讀入前hint行
f.write(s) 向文件寫入一個字符串或字節流
f.writelines(lines) 將一個元素全為字符串的列表寫入文件
f.seek(offset) 改變當前文件操作指針的位置,offset含義如下:0 – 文件開頭; 1 – 當前位置; 2 – 文件結尾

 

 

 

 

 

 

 

 

 

 

 

 

 

#掌握
.read() #讀取所有內容,光標移動到文件末尾 f.readline() #讀取一行內容,光標移動到第二行首部 f.readlines() #讀取每一行內容,存放於列表中 f.write('1111\n222\n') #針對文本模式的寫,需要自己寫換行符 f.write('1111\n222\n'.encode('utf-8')) #針對b模式的寫,需要自己寫換行符 f.writelines(['333\n','444\n']) #文件模式 f.writelines([bytes('333\n',encoding='utf-8'),'444\n'.encode('utf-8')]) #b模式

python2中的file與open:

#首先在python3中操作文件只有一種選擇,那就是open() #而在python2中則有兩種方式:file()與open() 兩者都能夠打開文件,對文件進行操作,也具有相似的用法和參數,
但是,這兩種文件打開方式有本質的區別,file為文件類,用file()來打開文件,
相當於這是在構造文件類,而用open()打開文件,是用python的內建函數來操作,
我們一般使用open()打開文件進行操作,而用file當做一個類型,比如type(f) is file

文件內光標的移動:

# read(3): #  1. 文件打開方式為文本模式時,代表讀取3個字符 #  2. 文件打開方式為b模式時,代表讀取3個字節 #二: 其余的文件內光標移動都是以字節為單位如seek,tell,truncate #注意: #  1. seek有三種移動方式0,1,2,其中1和2必須在b模式下進行,但無論哪種模式,#都是以bytes為單位移動的 #  2. truncate是截斷文件,所以文件的打開方式必須可寫,但是不能用w或w+等方式#打開,因為那樣直接清空文件了,所以truncate要在r+或a或a+等模式下測試效果  
import time with open('test.txt','rb') as f: f.seek(
0,2) while True: line=f.readline() if line: print(line.decode('utf-8')) else: time.sleep(0.2)

文件的修改:

一次讀入,統一處理

fo = open(fname,"r") txt = fo.read() ...#對全文txt進行處理 fo.close()

按數量讀入,逐步處理:

fo = open(fname,"r") txt = fo.read(2) while txt != "": #對txt進行處理 txt = fo.read(2) fo.close()

一次讀入,分行處理:

fo = open(fname,"r") for line in fo.readlines(): print(line) fo.close()

分行讀入,逐行處理:

fo = open(fname,"r") for line in fo: print(line) fo.close()

數據文件的寫入:

fo = open("output.txt","w+") ls = ["China", "France", "America"] fo.writelines(ls) fo.seek(0) for line in fo: print(line) fo.close()


免責聲明!

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



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