Python文件操作

前言

文件的讀寫操作是一門編程開發(fā)語言的基礎(chǔ),Python內(nèi)置了讀寫文件的函數(shù),用法和C是兼容的。

我們先解釋一下文件讀寫的本質(zhì),在Linux中,分為普通文件和特殊文件,其中特殊文件是指操作系統(tǒng)將所有設(shè)備都作為文件來處理。

我們這里處理的是普通文件,它是一組數(shù)據(jù)集合,存放在磁盤上。讀操作也就是將磁盤中的內(nèi)容讀到內(nèi)存中進(jìn)行處理,寫操作也就是將內(nèi)存中的數(shù)據(jù)持久化到磁盤上。

文件操作

文件類型

  1. 文本文件 - 這類文件以文本的ASCII碼形式存儲在計算機(jī)中。它是以"行"為基本結(jié)構(gòu)的一種信息組織和存儲方式。
  2. 二進(jìn)制文件 - 這類文件以文本的二進(jìn)制形式存儲在計算機(jī)中,用戶一般不能直接讀懂它們,只有通過相應(yīng)的軟件才能將其顯示出來。二進(jìn)制文件一般是可執(zhí)行程序、圖形、圖像、聲音等等。

字符編碼

對于文本來說,字符編碼比較重要,在Python中也經(jīng)常會出現(xiàn)字符編碼的異常問題,我們需要進(jìn)行各種轉(zhuǎn)換如encode和decode操作。以下幾個概念必須熟記于心:

  1. 在Python2x中默認(rèn)字符編碼是ASCII, 而在Python3里默認(rèn)是utf8
  2. unicode 分為 utf-32(占4個字節(jié)),utf-16(占兩個字節(jié)),utf8(占1-4個字節(jié))
  3. 在Pyhton3中encode,在編碼的同時還會把string 變成bytes類型,decode在解碼的同時還會把bytes變回string
  4. unicode是離用戶更近,bytes是離計算機(jī)更近

文件操作

一般來說,操作一個文件,會用到open, write, read, close等幾個函數(shù),由于文件讀寫時都有可能產(chǎn)生IOError,一旦出錯,后面的f.close()就不會調(diào)用。

所以,為了保證無論是否出錯都能正確地關(guān)閉文件,我們可以使用try ... finally來實現(xiàn),但是每次都這么寫實在太繁瑣。

所以,Python引入了with語句來自動幫我們調(diào)用close()方法:

來看一個例子:

fpath = r'./test.txt'

with open(fpath, 'w') as f:
    f.write('Hello, world!')


with open(fpath, 'r') as f:
    s = f.read()
    print(s)

輸出:
Hello, world!

通過with操作可以極大的簡化文件操作,這和try ... finally是一樣的,但是代碼更佳簡潔,并且不必調(diào)用f.close()方法。

目錄操作

通常文件都會以目錄為單元進(jìn)行組織,如果我們要操作文件、目錄,可以通過

#創(chuàng)建目錄
os.mkdir('test')


#刪除目錄
os.rmdir('test')


#修改目錄名
os.rename('test1', 'test2')


#遍歷當(dāng)前目錄
os.listdir('.') 

序列化與反序列化

什么是序列化與反序列化:

序列化Serialization將對象的狀態(tài)信息轉(zhuǎn)換為可以存儲或傳輸?shù)男问降倪^程。在序列化期間,對象將其當(dāng)前狀態(tài)寫入到臨時或持久性存儲區(qū)。以后,可以通過從存儲區(qū)中讀取或反序列化對象的狀態(tài),重新創(chuàng)建該對象。

序列化的作用

序列化之后,就可以把序列化后的內(nèi)容寫入磁盤,或者通過網(wǎng)絡(luò)傳輸?shù)絼e的機(jī)器上。

pickle與cpickle

pickle是python標(biāo)準(zhǔn)庫中提供序列化的功能模塊,可以將內(nèi)存對象非常方便的進(jìn)行持久化操作。其中cpickle的速度更快,我們將在后面的章節(jié)中進(jìn)行介紹。

import pickle
d = {"name": "xiaoT", "age":18}

#序列化到文件
f = open('dump.dat', 'wb')
pickle.dump(d, f)
f.close()


#反序列化到內(nèi)存
f = open('dump.dat', 'rb')
d = pickle.load(f)
f.close()
print(d)

輸出:
{'name': 'xiaoT', 'age': 18}

小結(jié)

在Python中,文件讀寫是通過open()函數(shù)打開的文件對象完成的。使用with語句操作文件IO是個好習(xí)慣。

原文地址

兔子先生 - Python文件操作

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Python文件操作 準(zhǔn)備工作: 1) 使用python來讀取文件是非常簡單的操作,我們使用open()函數(shù)來打開...
    小學(xué)弟_閱讀 578評論 0 0
  • 文件 文件 文件的概念 計算機(jī)的 文件,就是存儲在某種 長期儲存設(shè)備 上的一段 數(shù)據(jù) 長期存儲設(shè)備包括:硬盤、U ...
    Wei_Lai閱讀 352評論 0 0
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,275評論 2 89
  • 本來今次健行的目的地是惠斯勒(Whistler威士拿)北邊的Wedgemount湖,一條拔高1200米來回14公里...
    游閑溫哥華閱讀 1,188評論 3 8
  • 產(chǎn)品的質(zhì)量分 產(chǎn)品分層的直接目的就是流量分層,所以其影響直接體現(xiàn)在精品的曝光會得到保...
    會飛的粉紅豬閱讀 243評論 0 0

友情鏈接更多精彩內(nèi)容