Python學習之路4 檔案操作 編碼轉換

2021-08-11 06:05:12 字數 3528 閱讀 1932

檔案操作

檔案操作大概分三步:

把檔案開啟。

操作檔案。

把檔案關上。

開啟檔案

開啟檔案用open()函式,開啟成功後返回乙個資源,具體語法如下。

open(要開啟的檔案,開啟方式,開啟檔案的格式,預設為utf-8)

#例如f = open('passengers.txt','r',encoding='utf-8')

上例用open以唯讀的模式開啟檔案,因為該文字是utf-8編碼的,所以第三個引數是utf-8

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

"u"表示在讀取時,可以將 \r \n \r\n自動轉換成 \n (與 r 或 r+ 模式同使用)

"b"表示處理二進位制檔案(如:ftp傳送上傳iso映象檔案,linux可忽略,windows處理二進位制檔案時需標註)

讀取檔案

data = f.read() #然後用read讀取檔案,裡面可以傳參輸入5就是讀5個字元,不輸入就是讀所有字元

#讀取所有內容,檔案指標就移動到了檔案末尾

data = f.readline() #讀取一行內容

data = f.readlines() #將每一行變成乙個元素,組成乙個列表

#注意,readlines是將檔案內容讀取後放到記憶體裡,所以它只能讀小檔案,不能讀大檔案

下面是讀取大檔案最好的方式

for line in f:

print(line)

#這是讀取大檔案最好的方式,每次唯讀一行到記憶體當中,讀下一行的時候就會覆蓋當前記憶體當中的資料

寫入檔案

f.write('這裡是寫入的內容') #用write來寫入內容

print(f.tell()) #返回指標的位置

f.seek(0) #移動指標的位置,0代表移動到第0個的位置上

print(f.encoding) #列印檔案的編碼

print(f.fileno()) #列印檔案的編號

print(f.name) #列印開啟的檔案名字

print(f.seekable()) #判斷檔案是否可讀

print(f.writable()) #判斷檔案是否可寫

print(f.flush()) #強制重新整理快取

print(f.closed) #判斷檔案是否關閉

f.truncate(10) #從頭開始擷取10個字元

關閉檔案手動關閉檔案用close()函式。

f.close() #關閉檔案
自動關閉檔案。

with open() as f1:

pass

pass

# 資源只會在with裡面開啟,如果執行完畢則會自動關閉資源

#並且可以用下面這種方式同時開啟多個資源

with open() as f1,open() as f2 ,\

open() as f3,open() as f4:

pass

pass

##############下面是乙個修改檔案的案例##############

f = open('passengers','r',encoding='utf-8')

f_new = open('new','w',encoding='utf-8')

for line in f:

if "漂浮在一片無奈" in line:

line = line.replace('漂浮在一片無奈','人類的渺小') # replace函式在字串操作文章中可見

f_new.write(line)

f.close()

其實就是將乙個檔案的內容在記憶體中修改完後寫入到另乙個檔案中

因為python中沒有直接修改檔案內容的方法。

#############修改檔案的另一種方法##################

file_data = ""

with open(file,"r",encoding="utf-8") as f:

for line in f:

if old_str in line:

line = line.replace(old_str,new_str)

file_data += line

with open(file,"w",encoding="utf-8") as f:

f.write(file_data)

這種方法是先將所以的內容都讀出來,並且再寫到同乙個檔案中。

需知:

1.在python2預設編碼是ascii,python3裡預設是unicode。

2.unicode 分為 utf-32(佔4個位元組),utf-16(佔兩個位元組),utf-8(佔1-4個位元組),so utf-16就是現在最常用的unicode版本,不過在檔案裡存的還是utf-8,因為utf8省空間。

3.在py3中encode,在轉碼的同時還會把string 變成bytes型別,decode在解碼的同時還會把bytes變回string。

原理圖:

utf-8轉gbk:

我需要先用decode()解碼成為unicode,然後再用encode()轉換成gbk

decode()函式傳入乙個引數,引數為我當前的編碼是什麼,或者說我要將什麼編碼轉換成unicode;

encode()函式傳入乙個引數,引數為我要轉換成什麼編碼

如果不傳參則預設是utf-8

gbk轉utf-8也是同理

也就是說unicode作為中間編碼,用來完成utf-8和gbk之間的轉換。

str = '你好' #假設當前為utf-8   注意:python3裡面的預設編碼為unicode

str = str.decode('utf-8') #將utf-8轉換為unicode

str = str.encode('gbk') #將unicode轉換為gbk

print(str)

如果該檔案為gbk,同時python3的預設編碼又是unicode,則需要告訴程式不要按照預設的編碼去執行,要按照gbk的編碼去執行,這時就要在檔案最頂端宣告檔案編碼格式如下:

#-*- coding:gbk -*-

python3預設是unicode,而檔案又是utf-8型別,兩個編碼不統一輸入中文還不會亂碼是因為utf-8是unicode的乙個擴充套件集,所以python3預設支援中文不亂碼。

在python3中執行了encode()後,除了將編碼改變了之外,還將它變為byte型別。

Python記錄4 檔案操作

檔案 1.什麼是檔案 檔案是作業系統為使用者 應用程式提供一種操作硬碟的虛擬單位 2.為何要用檔案 為了訪問硬碟資料 3.如何用檔案 1.開啟檔案 2.讀寫檔案 3.關閉檔案 作業系統資源 f open r c users dell desktop a.txt mode r encoding utf...

4 檔案操作

學習目標 1 了解linux的目錄結構 2 掌握linux的目錄操作命令 學習過程 一 linux目錄的基本結構 根目錄,系統中所有的目錄都是從根目錄開始。bin 存放常用命令。boot 引導核心的程式目錄。dev 外部裝置名。etc etcetera 系統管理所要的配置檔案和子目錄。home 存放...

4 檔案操作

對檔案操作 對檔案操作就是對檔案的控制代碼的操作,通過open函式得到檔案的控制代碼。一 r,w,a,x,模式 r 只有讀操作,檔案必須存在。讀的時候預設游標在最開始讀,沒有寫操作,encoding在進行解碼操作。w 無法讀取檔案,只是寫操作,檔案存在覆蓋寫,檔案不存在的話,建立檔案再寫。encod...