Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python读取带块的文件,但以换行符(\n)结尾_Python_File_Newline - Fatal编程技术网

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

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

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 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()