我正在尝试“映射”一个非常大的ascii文件。基本上,我读几行直到找到一个特定的标签,然后我想知道这个标签的位置,这样我就可以在以后再次找到它来提取相关的数据。在
from itertools import dropwhile
with open(datafile) as fin:
ifin = dropwhile(lambda x:not x.startswith('Foo'), fin)
header = next(ifin)
position = fin.tell()
现在这个tell
没有给我正确的位置。这个问题以前有过各种形式的提问。原因大概是因为python正在缓冲file对象。所以,python告诉我它的文件指针在哪里,而不是我的文件指针在哪里。I don't want to turn off this buffering。。。这里的表现很重要。不过,如果能找到一种方法来确定python选择缓冲多少字节,那就更好了。在我的实际应用程序中,只要我关闭以Foo
开头的行,就不重要了。我可以到处写几行。所以,我实际上打算做的是:
有没有办法找到缓冲区的大小?在
对我来说,在Cpython中,缓冲区大小似乎是hard-coded为8192。据我所知,除了在打开文件时读取一行之外,没有其他方法从python接口获取这个数字,请执行
f.tell()
来计算python实际读取了多少数据,然后在继续之前查找文件的开头。在当然,如果第一行的长度小于em>大于8192字节,那么这就失败了,但是对于我的应用程序来说,这并不是什么真正的后果。在
相关问题 更多 >
编程相关推荐