有没有办法找到文件对象的缓冲区大小

2024-09-30 03:25:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试“映射”一个非常大的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开头的行,就不重要了。我可以到处写几行。所以,我实际上打算做的是:

^{pr2}$

有没有办法找到缓冲区的大小?在


Tags: 文件数据fromimportfoowithascii标签
1条回答
网友
1楼 · 发布于 2024-09-30 03:25:19

对我来说,在Cpython中,缓冲区大小似乎是hard-coded为8192。据我所知,除了在打开文件时读取一行之外,没有其他方法从python接口获取这个数字,请执行f.tell()来计算python实际读取了多少数据,然后在继续之前查找文件的开头。在

with open(datafile) as fin:
    next(fin)
    bufsize = fin.tell()
    fin.seek(0)

    ifin = dropwhile(lambda x:not x.startswith('Foo'), fin)
    header = next(ifin)
    position = fin.tell()

当然,如果第一行的长度小于em>大于8192字节,那么这就失败了,但是对于我的应用程序来说,这并不是什么真正的后果。在

相关问题 更多 >

    热门问题