从 StringIO 读取直到遇到某个字节的快速方法

2024-02-04

假设我有一些StringIO (from cStringIO)。我想从中读取缓冲区,直到遇到某个字符/字节,例如“Z”,所以:

stringio = StringIO('ABCZ123')
buf = read_until(stringio, 'Z')  # buf is now 'ABCZ'
# strinio.tell() is now 4, pointing after 'Z'

在 Python 中执行此操作最快的方法是什么?谢谢


我非常失望这个问题在堆栈溢出上只得到一个答案,因为这是一个有趣且相关的问题。不管怎样,因为只有 ovgolovin 给出解决方案,而且我认为它可能很慢,所以我想了一个更快的解决方案:

def foo(stringio):
    datalist = []
    while True:
        chunk = stringio.read(256)
        i = chunk.find('Z')
        if i == -1:
            datalist.append(chunk)
        else:
            datalist.append(chunk[:i+1])
            break
        if len(chunk) < 256:
            break
    return ''.join(datalist)

这会以块的形式读取 io(可能在第一个块中找不到结束字符)。它非常快,因为没有为每个字符调用Python函数,而是相反最大限度地使用了C编写的Python函数。

这跑大约比 ovgolovin 的解决方案快 60 倍。 I ran timeit检查它。

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

从 StringIO 读取直到遇到某个字节的快速方法 的相关文章

  • 如何在 Ubuntu 上安装 Python 模块

    我刚刚用Python写了一个函数 然后 我想将其做成模块并安装在我的 Ubuntu 11 04 上 这就是我所做的 创建 setup py 和 function py 文件 使用 Python2 7 setup py sdist 构建分发文
  • 在 Golang 中生成固定长度的随机十六进制字符串的有效方法?

    我需要生成很多固定长度的随机十六进制字符串 我找到这个解决方案golang中如何生成固定长度的随机字符串 https stackoverflow com a 31832326 710955 我正在做这样的事情 const letterByt
  • 如何将条目中的部分文本加粗并更改其背景颜色?

    我正在创建一个基于 Tkinter 的 GUI 它有一个 Entry 小部件 我想将其文本的一部分加粗并更改其背景颜色 但我不知道我该怎么做 如果我使用文本小部件 我可以只使用标签 但看起来它们不能与条目小部件一起使用 此代码使用文本小部件
  • Python 中 genfromtxt() 的可变列数?

    我有一个 txt具有不同长度的行的文件 每一行都是代表一条轨迹的一系列点 由于每条轨迹都有自己的长度 因此各行的长度都不同 也就是说 列数从一行到另一行不同 据我所知 genfromtxt Python 中的模块要求列数相同 gt gt g
  • 在 python-docx 中搜索和替换

    我有一个包含以下字符串的文档 模板 你好 我的名字是鲍勃 鲍勃是一个很好的名字 我想使用 python docx 打开此文档并使用 查找和替换 方法 如果存在 来更改每个字符串 Bob gt Mark 最后 我想生成一个新文档 其中包含字符
  • python ttk treeview:如何选择并设置焦点在一行上?

    我有一个 ttk Treeview 小部件 其中包含一些数据行 如何设置焦点并选择 突出显示 指定项目 tree focus set 什么也没做 tree selection set 0 抱怨 尽管小部件明显填充了超过零个项目 但未找到项目
  • python中函数变量的作用域

    假设我们有两个函数 def ftpConnect ftp FTP server ftp login ftp cwd path def getFileList ftpConnect files ftp nlst print files 如果我
  • 将 subprocess.Popen 的输出通过管道传输到文件

    我需要启动一些长时间运行的进程subprocess Popen 并希望拥有stdout and stderr从每个自动管道到单独的日志文件 每个进程将同时运行几分钟 我想要两个日志文件 stdout and stderr 每个进程当进程运行
  • VSCode pytest 测试发现失败

    Pytest 测试发现失败 用户界面指出 Test discovery error please check the configuration settings for the tests 输出窗口显示 Test Discovery fa
  • 行为:如何从另一个文件导入步骤?

    我刚刚开始使用behave http pythonhosted org behave 一个Pythonic BDD框架 使用小黄瓜语法 http docs behat org guides 1 gherkin html 行为需要一个特征 例
  • 更快地评估从右到左的矩阵乘法

    我注意到以二次形式评估矩阵运算右到左明显快于左到右在 R 中 取决于括号的放置方式 显然它们都执行相同的计算量 我想知道为什么会这样 这与内存分配有什么关系吗 A 5000 5000 B 5000 2 A matrix runif 5000
  • 在谷歌C​​olab中使用cv2.imshow()

    我正在尝试通过输入视频来对视频进行对象检测 cap cv2 VideoCapture video3 mp4 在处理部分之后 我想使用实时对象检测来显示视频 while True ret image np cap read Expand di
  • 使用 lambda 函数更改属性值

    我可以使用 lambda 函数循环遍历类对象列表并更改属性值 对于所有对象或满足特定条件的对象 吗 class Student object def init self name age self name name self age ag
  • 是否可以写一个负的python类型注释

    这可能听起来不合理 但现在我需要否定类型注释 我的意思是这样的 an int Not Iterable a string Iterable 这是因为我为一个函数编写了一个重载 而 mypy 不理解我 我的功能看起来像这样 overload
  • Python模块单元测试的最佳文件结构组织?

    遗憾的是 我发现有太多方法可以在 Python 中保存单元测试 而且它们通常没有很好的文档记录 我正在寻找一种 终极 结构 它可以满足以下大部分要求 be discoverable by test frameworks including
  • 如何对字符串列表进行排序?

    在 Python 中创建按字母顺序排序的列表的最佳方法是什么 基本回答 mylist b C A mylist sort 这会修改您的原始列表 即就地排序 要获取列表的排序副本而不更改原始列表 请使用sorted http docs pyt
  • 将 Scikit-Learn OneHotEncoder 与 Pandas DataFrame 结合使用

    我正在尝试使用 Scikit Learn 的 OneHotEncoder 将 Pandas DataFrame 中包含字符串的列替换为 one hot 编码的等效项 我的下面的代码不起作用 from sklearn preprocessin
  • 具有指定置信区间的 Seaborn 条形图

    我想在 Seaborn 条形图上绘制置信区间 但我已经计算出置信区间 如何让 Seaborn 绘制我的置信区间而不是尝试自行计算它们 例如 假设我有以下 pandas DataFrame x pd DataFrame Group 1 0 5
  • 如何识别图形线条

    我有以下格式的路径的 x y 数据 示例仅用于说明 seq p1 p2 0 20 2 3 1 20 2 4 2 20 4 4 3 22 5 5 4 22 5 6 5 23 6 2 6 23 6 3 7 23 6 4 每条路径都有多个点 它们
  • 缓存感知树的实现

    I have a tree where every node may have 0 to N children 用例是以下查询 给定指向两个节点的指针 这些节点是否位于树的同一分支内 Examples q 2 7 gt true q 5 4

随机推荐

  • 强制关闭 COM 端口

    我正在开发一个使用 COM 端口与外部控制器通信的应用程序 当我在连接通信电缆的情况下重新启动电脑时 Windows 7 打开该端口 但没有运行任何应用程序 因此我无法再访问它 我尝试以编程方式关闭它 但它仍然被占用 任何人都知道如何强制它
  • “VisualTree”被设置多次

    我在这个 xaml 文件中不断收到错误 属性 VisualTree 被设置多次
  • 两个视图 多个 UIPickerViews 单个出口

    我的应用程序有两个视图 具体取决于它决定加载哪个视图的方向 但是IB不允许我将两个PickerView连接到同一个OUTLET 有没有一种方法可以在代码中分配连接 以便在加载视图时将连接分配给outlet 或者我应该为每个视图做两次 或者我
  • 异常:ASP.NET MVC 控制器中的“值不在预期范围内”[重复]

    这个问题在这里已经有答案了 我有这个字符串要格式化 并且该部分抛出异常 字符串主体 private Task SendEmailConfirmation UserModel user var emailService new EmailUn
  • 执行特定的 Maven 阶段

    有没有办法执行 Maven 构建中的特定阶段 例如 如果我只想运行那些在预集成阶段执行的插件 Maven 是否提供了一种方法来做到这一点 e g mvn pre integration phase 您不能调用生命周期阶段本身 但可以调用绑定
  • 如何在后面的代码中添加两个CSS Class来控制?

    我在 ASP NET 后面的代码中设置 2 个 css 类 我可以这样做 txtBox Attributes Add class myClass1 txtBox Attributes Add class myClass2 它总是应用一个类
  • 无法更新 RVM - “致命:无法找到‘http’的远程帮助程序”

    我在 Ubuntu 8 04 上运行 RVM 1 1 6 突然无法再更新到最新版本 rvm get head Original installed RVM version rvm 1 1 6 by Wayne E Seguin email
  • 如何在 Matplotlib 中的绘图内绘制轴线?

    当我使用 Matplotlib 绘制数据时 默认情况下 轴始终绘制为框架图的框 假设我正在轴限制内绘制数据 2 lt x lt 2 and 2 lt y lt 2 但我想通过原点在该绘图区域内绘制轴线 最好沿着这些轴线绘制刻度线和刻度标签
  • AutoMapper null 源值和自定义类型转换器,无法映射?

    当将自定义类型转换器 ITypeConverter 与 AutoMapper 一起使用时 如果源值为null e g Mapper CreateMap
  • Python 类型在方法中暗示自己的类

    Edit 我注意到人们评论说类型提示不应该与 eq 当然 不应该 但这不是我问题的重点 我的问题是why该类不能用作方法中的类型提示参数 但可以在方法中使用itself 事实证明 Python 类型提示对我使用 PyCharm 时非常有用
  • java中这个说法正确吗?

    我想使用数据报套接字在两台计算机之间进行数据传输 我使用以下行 host InetAddress getByAddress mypc new byte 192 168 1 110 但是当我使用上述语句时 我收到此错误 可能会损失精度 所以我
  • 相当于: git log --exclude-author?

    在工作中 我们有一个 git 存储库 其中大部分提交都是机器人用户自动提交的 有时我更喜欢查看该存储库中的 git 日志 但看不到自动提交 我想它可以被描述为倒置的 git log author 或 git log exclude auth
  • 从 iPhone 上的视频输出获取静态图像?

    我正在编写一个应用程序来显示 iPhone 相机所看到的光照条件的统计数据 我每秒拍摄一张图像 并对其进行计算 为了捕获图像 我使用以下方法 void captureNow AVCaptureConnection videoConnecti
  • 使用 hiera 设置类参数?

    我试图弄清楚如何使用 hiera 设置类参数的值 我正在使用两个简单的类进行测试 testhiera 和 testhiera2 以下是这些课程 root puppet el7 001 modules cat testhiera manife
  • Xcode 上 Playground 的默认目录

    当我使用 Xcode 10 1 创建新的 Playground 时 它始终默认为 Library Autosave Information 我有什么办法可以改变这个吗 解决方法与symlink Close XCode gt 在终端中输入 m
  • Android Room类型转换多种枚举类型

    我正在为我的 Room 数据库编写一个类型转换器 我有几个自定义枚举类 我想在存储在数据库中时将它们全部转换为其序数 那么 有没有办法简化它 例如传递通用枚举类型 而不是为每个单独的类编写以下内容 class Converter TypeC
  • 哪个 ember.js 组件负责将模板插入到 DOM 中?

    我正在构建ember js rails应用程序 所有车把模板都存储在 js 文件中 我想了解当路由器更改状态时它们如何插入到 DOM 中 Ember 的哪一部分执行此操作 我如何告诉 ember 放置模板 现在我只能将我的模板附加到我有一个
  • Angular 4未加载组件

    我尝试在 Angular 4 应用程序中使用 Angular 路由 但该应用程序无法加载与请求的路由匹配的组件 Here is app routing module ts import NgModule from angular core
  • 有没有快速的算法来删除字符串中的重复子串?

    有一个类似的字符串 dxabcabcyyyydxycxcxz 我想将它合并到 dxabcydxycxz 其他例子 ddxddx gt dxdx abbab gt abab 规则是 if adjacent and same merge Suc
  • 从 StringIO 读取直到遇到某个字节的快速方法

    假设我有一些StringIO from cStringIO 我想从中读取缓冲区 直到遇到某个字符 字节 例如 Z 所以 stringio StringIO ABCZ123 buf read until stringio Z buf is n