国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - 在Python程序中進(jìn)行文件讀取和寫入操作的教程

在Python程序中進(jìn)行文件讀取和寫入操作的教程

2020-06-15 09:59廖雪峰 Python

這篇文章主要介紹了在Python程序中進(jìn)行文件讀取和寫入操作的教程,是Python學(xué)習(xí)當(dāng)中的基礎(chǔ)知識,需要的朋友可以參考下

讀寫文件是最常見的IO操作。Python內(nèi)置了讀寫文件的函數(shù),用法和C是兼容的。

讀寫文件前,我們先必須了解一下,在磁盤上讀寫文件的功能都是由操作系統(tǒng)提供的,現(xiàn)代操作系統(tǒng)不允許普通的程序直接操作磁盤,所以,讀寫文件就是請求操作系統(tǒng)打開一個文件對象(通常稱為文件描述符),然后,通過操作系統(tǒng)提供的接口從這個文件對象中讀取數(shù)據(jù)(讀文件),或者把數(shù)據(jù)寫入這個文件對象(寫文件)。
讀文件

要以讀文件的模式打開一個文件對象,使用Python內(nèi)置的open()函數(shù),傳入文件名和標(biāo)示符:

?
1
>>> f = open('/Users/michael/test.txt', 'r')

標(biāo)示符'r'表示讀,這樣,我們就成功地打開了一個文件。

如果文件不存在,open()函數(shù)就會拋出一個IOError的錯誤,并且給出錯誤碼和詳細(xì)的信息告訴你文件不存在:

?
1
2
3
4
>>> f=open('/Users/michael/notfound.txt', 'r')
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: '/Users/michael/notfound.txt'

如果文件打開成功,接下來,調(diào)用read()方法可以一次讀取文件的全部內(nèi)容,Python把內(nèi)容讀到內(nèi)存,用一個str對象表示:

?
1
2
>>> f.read()
'Hello, world!'

最后一步是調(diào)用close()方法關(guān)閉文件。文件使用完畢后必須關(guān)閉,因為文件對象會占用操作系統(tǒng)的資源,并且操作系統(tǒng)同一時間能打開的文件數(shù)量也是有限的:

?
1
>>> f.close()

由于文件讀寫時都有可能產(chǎn)生IOError,一旦出錯,后面的f.close()就不會調(diào)用。所以,為了保證無論是否出錯都能正確地關(guān)閉文件,我們可以使用try ... finally來實現(xiàn):

?
1
2
3
4
5
6
try:
  f = open('/path/to/file', 'r')
  print f.read()
finally:
  if f:
    f.close()

但是每次都這么寫實在太繁瑣,所以,Python引入了with語句來自動幫我們調(diào)用close()方法:

?
1
2
with open('/path/to/file', 'r') as f:
  print f.read()

這和前面的try ... finally是一樣的,但是代碼更佳簡潔,并且不必調(diào)用f.close()方法。

調(diào)用read()會一次性讀取文件的全部內(nèi)容,如果文件有10G,內(nèi)存就爆了,所以,要保險起見,可以反復(fù)調(diào)用read(size)方法,每次最多讀取size個字節(jié)的內(nèi)容。另外,調(diào)用readline()可以每次讀取一行內(nèi)容,調(diào)用readlines()一次讀取所有內(nèi)容并按行返回list。因此,要根據(jù)需要決定怎么調(diào)用。

如果文件很小,read()一次性讀取最方便;如果不能確定文件大小,反復(fù)調(diào)用read(size)比較保險;如果是配置文件,調(diào)用readlines()最方便:

?
1
2
for line in f.readlines():
  print(line.strip()) # 把末尾的'\n'刪掉

file-like Object

像open()函數(shù)返回的這種有個read()方法的對象,在Python中統(tǒng)稱為file-like Object。除了file外,還可以是內(nèi)存的字節(jié)流,網(wǎng)絡(luò)流,自定義流等等。file-like Object不要求從特定類繼承,只要寫個read()方法就行。

StringIO就是在內(nèi)存中創(chuàng)建的file-like Object,常用作臨時緩沖。
二進(jìn)制文件

前面講的默認(rèn)都是讀取文本文件,并且是ASCII編碼的文本文件。要讀取二進(jìn)制文件,比如圖片、視頻等等,用'rb'模式打開文件即可:

?
1
2
3
>>> f = open('/Users/michael/test.jpg', 'rb')
>>> f.read()
'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 十六進(jìn)制表示的字節(jié)

字符編碼

要讀取非ASCII編碼的文本文件,就必須以二進(jìn)制模式打開,再解碼。比如GBK編碼的文件:

?
1
2
3
4
5
>>> f = open('/Users/michael/gbk.txt', 'rb')
>>> u = f.read().decode('gbk')
>>> u
u'\u6d4b\u8bd5'
>>> print u
測試

如果每次都這么手動轉(zhuǎn)換編碼嫌麻煩(寫程序怕麻煩是好事,不怕麻煩就會寫出又長又難懂又沒法維護(hù)的代碼),Python還提供了一個codecs模塊幫我們在讀文件時自動轉(zhuǎn)換編碼,直接讀出unicode:

?
1
2
3
import codecs
with codecs.open('/Users/michael/gbk.txt', 'r', 'gbk') as f:
  f.read() # u'\u6d4b\u8bd5'

寫文件

寫文件和讀文件是一樣的,唯一區(qū)別是調(diào)用open()函數(shù)時,傳入標(biāo)識符'w'或者'wb'表示寫文本文件或?qū)懚M(jìn)制文件:

?
1
2
3
>>> f = open('/Users/michael/test.txt', 'w')
>>> f.write('Hello, world!')
>>> f.close()

你可以反復(fù)調(diào)用write()來寫入文件,但是務(wù)必要調(diào)用f.close()來關(guān)閉文件。當(dāng)我們寫文件時,操作系統(tǒng)往往不會立刻把數(shù)據(jù)寫入磁盤,而是放到內(nèi)存緩存起來,空閑的時候再慢慢寫入。只有調(diào)用close()方法時,操作系統(tǒng)才保證把沒有寫入的數(shù)據(jù)全部寫入磁盤。忘記調(diào)用close()的后果是數(shù)據(jù)可能只寫了一部分到磁盤,剩下的丟失了。所以,還是用with語句來得保險:

?
1
2
with open('/Users/michael/test.txt', 'w') as f:
  f.write('Hello, world!')

要寫入特定編碼的文本文件,請效仿codecs的示例,寫入unicode,由codecs自動轉(zhuǎn)換成指定編碼。
小結(jié)

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

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 精品无人乱码一区二区三区的优势 | 在线精品一区 | 亚洲欧美日韩一区二区 | 免费观看污视频 | 欧美精品欧美精品系列 | 久久久久久久国产 | 亚洲一区在线观看视频 | 国产最新视频 | julia一区二区中文久久94 | 久久丁香 | 羞羞动漫在线观看 | 狠狠色噜噜狠狠狠8888米奇 | 国产精品网站在线观看 | 午夜在线电影 | 国产成人一区二区三区 | 国产亚洲精品美女久久久久久久久久 | 欧美日韩国产精品一区 | 青青草久 | 欧美日韩第一页 | 操操操av | 色播av| 天天射影院 | 亚洲精品久久久久一区二区三区 | 国产精品精品视频一区二区三区 | 久久精品无码一区二区三区 | 欧美一区国产一区 | 国产 日韩 欧美 在线 | 久久综合伊人 | 羞羞视频在线播放 | 在线免费观看毛片 | 日韩一区二区在线观看 | 欧美激情一区二区三级高清视频 | 免费成年人视频在线观看 | 激情国产 | 欧美日韩免费在线 | 中文字幕日韩av | 午夜精品一区二区三区在线视频 | 国产高清在线观看 | 最近中文字幕 | 国产精品久久久久久久 | 欧美日韩成人在线播放 |