關於python open函式緩衝區的問題
open函式原型
open(name[, mode[, buffering]])
關於第三個引數buffering,文件中的解釋是
The optional buffering argument specifies the file’s desired buffer size: 0 means unbuffered, 1 means line buffered, any other positive value means use a buffer of (approximately) that size. A negative buffering means to use the system default, which is usually line buffered for tty devices and fully buffered for other files. If omitted, the system default is used.
可以看到:
若buffering為0或False,沒有緩衝區;
f = open(r’D:\code\py\opentest’, ‘w’, False),
f.write(‘望水至極’)
去opentest檔案檢視,字串已被寫入檔案。若為1或True有緩衝區;
f = open(r’D:\code\py\opentest’, ‘w’, True)
f.write(‘望水至極’)
有緩衝區,不過文件時說“1 means line buffered”行緩衝?不理解什麼意思,不過使用上感覺和使用預設緩衝區一樣;
若緩衝區滿了則自動寫入檔案opentest中,否則需要f.flush()或f.close(),才能寫入opentest檔案;若為其他正數則表示緩衝區大小;
f = open(r’D:\code\py\opentest’, ‘w’, 20)
有緩衝區,緩衝區大小20位元組
當寫入字串少於20位元組時,先寫入緩衝區,需要flush或close(),才能寫入opentest檔案;
當字串不少於20位元組時,先寫入緩衝區,若緩衝區滿了,則自動寫入opentest檔案,依次類推,最後緩衝區中的內容需f.flush或f.close(),才能寫入opentest檔案;若為負數,則使用預設緩衝區大小;
f = open(r’D:\code\py\opentest’, ‘w’, -1)
f.write(‘望水至極’)
先寫入緩衝區,若緩衝區滿了則自動寫入檔案opentest中,否則需要f.flush()或f.close()才能寫入檔案
關於預設緩衝區大小究竟多大、行緩衝什麼意思,本人暫時不知,希望瞭解的朋友可以指出,謝謝。
Thanks for your seeing!