我有一个txt文件,我正在阅读并打印它。
f=open('e://send.txt','r',encoding='UTF-8')
for i in f:
text=f.read(1024)
print(text+'\n\n\n')
f.close()`
当文字打印时,某些行丢失。对于exp: txt文件是:
کشاورزی مینوشت را بنویسد! از نظر شما شاید این دو برنامه نویس هر دو
***یکسان باشند اما اتفاقی که می افتد این است که بازار ثابت نمی ماند!***
فرض کنید به خاطر توافق
但是输出是:
بنویسد! از نظر شما شاید این دو برنامه نویس هر دو
missing lines
فرض کنید به خاطر توافق
答案 0 :(得分:4)
逐行读取文件:
AFTS::
或以块的形式阅读:
for i in f:
print(i)
但不要两者都做。在您的代码中,while True:
text = f.read(1024)
if not text:
break
print(text, eol='')
循环读入i
的文本将被忽略,而这是您丢失的数据。
答案 1 :(得分:1)
for i in f
将迭代文件的行,read()
将从中读取。随着你的迭代和你的阅读向前移动文件位置,你最终会遗漏一些数据。
尝试选择其中一个。如果有帮助,read()
将在EOF上返回一个空字符串。
答案 2 :(得分:0)
实际上单循环从文件读取两次,第一次是迭代器语法(隐式),第二次是读取调用。如果您使用的是for line in file
个惯用法,请跳过明确的read()
。
with open('e:\\send.txt','r', encoding='UTF-8') as f:
for line in f:
print(line)
答案 3 :(得分:0)
正如其他人所提到的,在for循环中使用类似文本的文件会逐行读取它,但是for循环很漂亮和pythonic,所以我过去做过一件事(如果我需要这样做的话)不止一次的分块阅读)将其放入生成器功能中以保持清洁。
类似的东西:
def chunked(f, chunk_size=1024):
while True:
chunk = f.read(chunk_size)
if not chunk:
break
yield chunk
您在代码中调用的内容如下:
f = open('e://send.txt','r',encoding='UTF-8')
for text in chunked(f):
print(text + '\n\n\n')
这基本上是chepner建议的代码,只是可以保持代码的主体更清洁?