[英]loop doesn't work for TextIOWrapper for a certain situation
當我在將文件作為 TextIOWrapper 打開后使用第二行“text = f.read()”時,以下代碼給出了一個空的塊列表。 但是,當我省略 'text=f.read()' 行時,它可以正常運行。 誰能解釋為什么它會這樣?
with open(r'LDcal20_220127.3dm','r') as f:
text = f.read()
chunk = []
for line in f:
if line.startswith('ND'):
chunk.append(line)
text = f.read()
將文件指針留在文件末尾。 當for
循環第一次調用next(f)
時,會引發StopIteration
異常,因為從文件中沒有任何內容可讀取,立即終止循環。
如果要遍歷文件,則需要關閉它並創建一個新的 object:
with open(r'LDcal20_220127.3dm','r') as f:
text = f.read()
with open(r'LDcal20_220127.3dm','r') as f:
chunk = []
for line in f:
if line.startswith('ND'):
chunk.append(line)
或使用seek
重置指針:
with open(r'LDcal20_220127.3dm','r') as f:
text = f.read()
f.seek(0)
chunk = []
for line in f:
if line.startswith('ND'):
chunk.append(line)
不過,我會推薦第一個解決方案。 將迭代器協議(它本身在文件對象上調用read
)與直接文件讀取混合會產生不可預知的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.