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