繁体   English   中英

python读取带有块的文件,但以换行符结尾(\\ n)

[英]python read file with block, but end with newline(\n)

test.txt是一个“ \\ n”拆分文本文件:

f =打开('test.txt','r')f.read(256)

但是,当读取256时,最后的记录可能没有完整的行。

如何阅读如:

我将读取设置为256,但是当248是“ \\ n”并且256时,没有完整行的最后一条记录只是读取248,而f.tell()给出248的位置。

谢谢。

如果您使用换行符分割数据,为什么不以相同的方式读取数据?

with open('test.txt', 'r') as f:
    lines = f.readlines()
# Now each line in lines is a complete line.

您要阅读的是整行。 对于此任务,通常需要执行此操作。

size_so_far = 0
contents = []

for line in open('test.txt'):
      size_so_far += len(line)
      if size_so_far > 256:
         break
      contents.append(line)

contents = "".join(contents)

读取带有可变长度的行的文件的最简单方法是用'\\n''\\r''\\r\\n'任何一个或什至是它们的混合物来分隔:

with open('yourfile.txt', 'rU') as f:
    for line in f:
        do_something_with(f)
        # optional, if you want to bale out after 256 bytes:
        if f.tell() >= 256: break

这样做是读取大块,找到行的结尾,然后一次产生一行。 底层代码是用C编写的。我还没有看到任何证据表明用Python代码做同样的事情会更快。

您关心效率吗?

这是一种实现方法:

data=f.read(256)
data=data.splitlines(True)
if data[-1]!=data[-1].splitlines()[-1]:
    #must be newline at end of last line
    data="".join(data)
else:
    data="".join(data[:-1])

print data

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM