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

2023-11-26

我正在尝试“映射”一个非常大的 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 正在缓冲文件对象。所以,python 告诉我它的文件指针在哪里,而不是我的文件指针在哪里。我不想关闭这个缓冲...这里的表现很重要。然而,如果知道是否有一种方法可以确定 python 选择缓冲多少字节,那就太好了。在我的实际应用程序中,只要我关闭以Foo, 没关系。我可以到处写几行。所以,我实际上计划做的是这样的:

position = fin.tell() - buffer_size(fin)

有什么办法可以找到缓冲区大小吗?


对我来说,缓冲区大小看起来是硬编码的在 Cpython 中为 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()

当然,如果第一行是longer超过 8192 字节长,但这对我的应用程序没有任何实际影响。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 派生类中的私有虚函数[重复]

    这个问题在这里已经有答案了 可能的重复 C 重写公共 私有继承 class base public virtual void doSomething 0 class derived public base private lt Note t
  • 当标志在不同线程中更改时,While 循环不会结束[重复]

    这个问题在这里已经有答案了 我的 Java 程序的 main 方法中有一个 while 循环正在运行 该循环应该一直运行 直到在程序的 keyPressed 方法中将布尔标志变量设置为 true 我将程序作为 KeyListener 添加到
  • 如何修复 xcrun 无法找到 simctl 错误?

    我有 Xcode 6 2 Beta 尝试 xcrun simctl in terminal yields xcrun 错误 无法找到实用程序 simctl 不是开发人员工具或在 PATH 中 我通过输入解决了这个问题 Xcode gt Pr
  • 格式化 SoapUI 项目文件

    我使用 SoapUI 的免费版本 版本 4 6 1 并注意到它的项目文件格式非常糟糕 它的许多元素并不像开发人员维护的大型 XML 文件那样位于专用行或缩进中 这使得区分和合并对源代码控制项目文件的更改变得更加困难 我知道 SoapUI P
  • 如何从工作表中删除公式但保留其计算值[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 询问代码的问题必须对所解决的问题表现出最低限度的了解 包括尝试的解决方案 为什么不起作用以及预期结果 也可以看看 Stack Overflow 问题清单 有关您编写的代码的问题必须描
  • WPF 中的分段文本框

    有谁知道免费或商业 WPF 控件可以执行以下操作 每个框 X 个字符 并在完成每个框时自动跳到下一个框 类似于为 Microsoft 产品输入许可证密钥的方式 我认为从头开始做起来并不是特别困难 但如果已经存在一个很好的例子 我想避免重新发
  • 如何在 NestedScrollView 中使用 RecyclerView

    我有这样的布局
  • 在rails4中设置hstore,动态键/值

    我第一次在 Rails4 应用程序中使用 Hstore 并且在表单中使用 javascript 为 hstore 列构建动态表单字段 schema 在 Rails 4 中 我不需要在模型中添加任何 setter getter 方法 对吗 在
  • 在 Scala 中使用 Streams 进行迭代

    SICP表示迭代过程 例如平方根计算的牛顿法 pi 计算等 可以用以下形式表示Streams 有人用吗streams在 Scala 中建模迭代 这是生成 pi 近似值流的一种方法 val naturals Stream from 0 0 1
  • 通过引用传递键和值的替代方法:

    有人可以向我解释为什么你不能传递密钥作为参考吗 Ex if is array where foreach where as key gt value key sec key value sec value unset key value T
  • fsync、sync:它真的做了它应该做的事情吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我想对 Linux 2 6 31 中的sync 8 和 fsync 函数的功能有更多的说明 它是否确保文件写入相应的存储 http linux die net man 8 sync
  • 如何使用主题标签更改单词的颜色

    我需要能够以不同的颜色显示所有以 开头的单词的文本 并且它们应该是可单击的 我怎样才能做到这一点 这应该可以解决问题 private void setTags TextView pTextView String pTagString Spa
  • Java socketRead0 问题

    我正在使用 htmlunit 开发一个网络爬虫 并且添加了所有必需的超时 但我注意到当我使用 Java VisualVM 进行线程转储时 某些网站的服务器没有响应时 应用程序会挂起 java lang Thread State RUNNAB
  • Google 地图 Android API:授权失败。确保启用“Google Maps Android API v2”。确保以下 Android Key 存在

    我收到此错误 E Google Maps Android API Authorization failure Please see https developers google com maps documentation android
  • 有没有办法在 CSS 中的内联元素上设置 min-line-height ?

    我有一些内联链接 图标显示在左侧 填充 背景 但是当字体太小时 图像不适合行高 并且会在顶部和底部被裁剪 有没有什么方法可以在不使用javascript的情况下防止这种情况发生 我不想以 px 为单位设置字体大小 将某些 min line
  • 错误:EACCES:权限被拒绝

    I run npm 安装 lodash但它抛出错误 EACCES 权限被拒绝错误 我知道这是权限问题 但据我所知 本地安装节点模块不需要 sudo 权限 如果我使用 sudo 运行它 它会安装在 node modules 文件夹中 drwx
  • 创建一个ostream

    出于教育原因 我正在尝试创建一个 C ostream 我的测试将创建一个 ostream 其行为类似于 ofstream 只不过它不是写入文件 而是写入双端队列或向量容器 正如您所说 因为这是为了教育 我将向您展示我将如何做这样的事情 否则
  • hibernate不创建表但没有错误消息

    我正在做一个 spring boot 项目并尝试使用 hibernate 创建一个表 当我运行应用程序并且服务器正常启动时没有收到错误 但该表没有创建 状态更新 java package model import java util Dat
  • android:如何更改ListPreference标题颜色?

    我想将 ListPreference 的标题和线条颜色从蓝色更改为粉红色 以匹配操作栏的线条 有任何想法吗 提前致谢 我一直在浏览 Android 的themes xml and styles xml看着像这样的东西dialogPrefer
  • 有没有办法找到文件对象的缓冲区大小

    我正在尝试 映射 一个非常大的 ascii 文件 基本上 我会读取行 直到找到某个标签 然后我想知道该标签的位置 以便稍后再次查找它以提取相关数据 from itertools import dropwhile with open data