读取缺失文本(1024)

时间:2015-08-07 12:54:32

标签: python

我有一个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
فرض کنید به خاطر توافق 

4 个答案:

答案 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建议的代码,只是可以保持代码的主体更清洁?