python读取带块的文件,但以换行符(\n)结尾
test.txt是一个“\n”分割文本文件: f=open('test.txt','r')f.read(256) 但是,在读取256时,最后的记录可能不完整 如何阅读,例如: 我设置为256 但当248是“\n” 最后256条记录不带全行 只需读取248,f.tell()给出248的位置python读取带块的文件,但以换行符(\n)结尾,python,file,newline,Python,File,Newline,test.txt是一个“\n”分割文本文件: f=open('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 i
谢谢。如果您使用换行符分割数据,为什么不以相同的方式读取
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)
你在乎效率吗 以下是一种方法:
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
读取具有可变长度行的文件的最简单方法是:
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代码做同样的事情会更快。流如何知道数据中是否有一行新行尚未读取?如果你的文件被分成了几行,而且这些行很重要,为什么你要用固定大小的块来读取呢?你可能来自另一种语言,在这种语言中,你访问文件的级别很低,需要解决这样的问题(可能是C?)。在Python中,按行分割文件是正常的,有很多很好的方法可以做到这一点(下面答案中的示例)。除非您使用自己的二进制格式,否则您可能不需要使用read()。是的,我可能会读取大文件,并对读取的内容执行其他操作,如果我逐行读取,如果我逐行读取,将非常慢,谢谢。不用担心。我现在稍微修改了一下,以使用更少的内存。-1(1)读取整个文件的循环在哪里(或者至少读取到足够的整行)?(2)
data1
未定义(3)data[-1]!=数据[-1]。拆分行()[-1]
是快速文件读取器的一部分??很抱歉,它应该是“数据”而不是“数据1”。看到基准点会很有趣,一开始我不知道他是在追求纯粹的表现,事实上我认为他最多只能读256个,所以我选择了一些能很好地使用分割线的东西。顺便说一句,约翰,我不认为-1是完全公平的:(,他的问题不一定要求任何其他要求。这将超过256,因此相当于f.read(255)+f.readline()