python總結(十四) IO

2021-09-24 19:34:41 字數 2239 閱讀 6290

1.讀取檔案寫法:

常用寫法如下:

try:

f = open('/path/to/file', 'r')

print(f.read())

finally:

if f:

f.close()

每次這樣太繁瑣,改為:

with open('/path/to/file', 'r') as f:

print(f.read())

"""呼叫read()會一次性讀取檔案的全部內容,如果檔案有10g,記憶體就爆了,

所以,要保險起見,可以反覆呼叫read(size)方法,每次最多讀取size個位元組的內容。

另外,呼叫readline()可以每次讀取一行內容,呼叫readlines()一次讀取所有內容並按行返回list。

如果不能確定檔案大小,反覆呼叫read(size)比較保險;如果是配置檔案,呼叫readlines()最方便"""

2、二進位制檔案

遇到有些編碼不規範的檔案,你可能會遇到unicodedecodeerror,因為在文字檔案中可能夾雜了一些非法編碼的字元。遇到這種情況,open()函式還接收乙個errors引數,表示如果遇到編碼錯誤後如何處理。最簡單的方式是直接忽略:   

f = open('/users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')
3.寫檔案

with open('/users/michael/test.txt', 'w') as f:

f.write('hello, world!')

""",以'w'模式寫入檔案時,如果檔案已存在,會直接覆蓋(相當於刪掉後新寫入乙個檔案)。

4.stringio

要把str寫入stringio,我們需要先建立乙個stringio,然後,像檔案一樣寫入 

>>> from io import stringio

>>> f = stringio()

>>> f.write('hello')

5>>> f.write(' ')

1>>> f.write('world!')

6>>> print(f.getvalue())

hello world!

要讀取stringio,可以用乙個str初始化stringio,然後,像讀檔案一樣讀取 

>>> from io import stringio

>>> f = stringio('hello!\nhi!\ngoodbye!')

>>> while true:

... s = f.readline()

... if s == '':

... break

... print(s.strip())

5.bytesio

stringio操作的只能是str,如果要操作二進位制資料,就需要使用bytesio。bytesio實現了在記憶體中讀寫bytes,我們建立乙個bytesio,然後寫入一些bytes

>>> from io import bytesio

>>> f = bytesio()

>>> f.write('中文'.encode('utf-8'))

6>>> print(f.getvalue())

b'\xe4\xb8\xad\xe6\x96\x87'

>>> from io import bytesio

>>> f = bytesio(b'\xe4\xb8\xad\xe6\x96\x87')

>>> f.read()

b'\xe4\xb8\xad\xe6\x96\x87'

6.seek()

seek()方法用於移動檔案讀取指標到指定位置。fileobject.seek(offset[, whence])

7.tell()

tell()方法返回檔案的當前位置,即檔案指標當前位置。

十四 塊I O層

系統中能夠隨機訪問固定大小資料片的硬體裝置稱作塊裝置,這些固定大小的資料片稱為塊。最常見的塊裝置是硬碟 還有軟盤驅動器 光碟機盒快閃儲存器等。他們都是以安裝檔案系統的方式使用的。字元裝置按照位元組流的方式有序訪問,如鍵盤和串列埠。14.1 剖析乙個塊裝置 塊裝置中最小的可定址單元是扇區。扇區大小一般...

第十四章 高階I O

對於乙個給定的描述符,有兩種為其指定非阻塞i o的方法。1.如果呼叫open 函式獲得描述符,可以使用o nonblock標誌。如int fd open a.txt o rdwr o noneblock 2.對於已經開啟的描述符,可以使用fcntl 函式設定o nonblock標誌。在此使用之前的例...

十四周總結

這一周小組進行完最後一次的混合考核後,終於分了方向,之前我想選前端,因為我認為前端可以給讓我更快地看到效果,也就是能很快體驗到成就感,但是我好好思索了一番後 結合學長所說以及查詢資料 我還時選擇了後端。經過一周左右的學習後,我覺得我還是挺願意學後端的,雖然現在學的一般,雖然有時會有點枯燥,但是我有十...