Python 2 和 3 中的分块字节(不是字符串)

2024-01-19

事实证明这比我预期的要棘手。我有一个字节字符串:

data = b'abcdefghijklmnopqrstuvwxyz'

我想分块读取这些数据n字节。在 Python 2 下,只需稍加修改即可实现这一点grouper食谱来自itertools文档:

def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return (''.join(x) for x in izip_longest(fillvalue=fillvalue, *args))

有了这个,我可以打电话:

>>> list(grouper(data, 2))

And get:

['ab', 'cd', 'ef', 'gh', 'ij', 'kl', 'mn', 'op', 'qr', 'st', 'uv', 'wx', 'yz']

在 Python 3 下,这变得更加棘手。这grouper函数如所写 简单地摔倒了:

>>> list(grouper(data, 2))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in <genexpr>
TypeError: sequence item 0: expected str instance, int found

这是因为在 Python 3 中,当你迭代一个字节串时(比如b'foo'),您将得到一个整数列表,而不是一个字节列表:

>>> list(b'foo')
[102, 111, 111]

蟒蛇3bytes函数将在这里提供帮助:

def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return (bytes(x) for x in izip_longest(fillvalue=fillvalue, *args))

使用它,我得到了我想要的:

>>> list(grouper(data, 2))
[b'ab', b'cd', b'ef', b'gh', b'ij', b'kl', b'mn', b'op', b'qr', b'st', b'uv', b'wx', b'yz']

但是(当然!)bytesPython 2 下的函数不工作 一样的方法。这只是一个别名str,结果是:

>>> list(grouper(data, 2))
["('a', 'b')", "('c', 'd')", "('e', 'f')", "('g', 'h')", "('i', 'j')", "('k', 'l')", "('m', 'n')", "('o', 'p')", "('q', 'r')", "('s', 't')", "('u', 'v')", "('w', 'x')", "('y', 'z')"]

...这根本没有帮助。我最终写了以下内容:

def to_bytes(s):
    if six.PY3:
        return bytes(s)
    else:
        return ''.encode('utf-8').join(list(s))

def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return (to_bytes(x) for x in izip_longest(fillvalue=fillvalue, *args))

这似乎可行,但这真的是这样做的方法吗?


Funcy http://funcy.readthedocs.org/en/stable/overview.html(一个提供各种有用实用程序的库,支持 Python 2 和 3)提供chunks功能 http://funcy.readthedocs.org/en/stable/seqs.html#chunks这正是这样做的:

>>> import funcy
>>> data = b'abcdefghijklmnopqrstuvwxyz'
>>> list(funcy.chunks(6, data))
[b'abcdef', b'ghijkl', b'mnopqr', b'stuvwx', b'yz']   # Python 3
['abcdef', 'ghijkl', 'mnopqr', 'stuvwx', 'yz']        # Python 2.7

或者,您可以在程序中包含一个简单的实现(与 Python 2.7 和 3 兼容):

def chunked(size, source):
    for i in range(0, len(source), size):
        yield source[i:i+size]

它的行为是相同的(至少对于你的数据而言;Funcy 的chunks也适用于迭代器,但不适用于):

>>> list(chunked(6, data))
[b'abcdef', b'ghijkl', b'mnopqr', b'stuvwx', b'yz']   # Python 3
['abcdef', 'ghijkl', 'mnopqr', 'stuvwx', 'yz']        # Python 2.7
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 2 和 3 中的分块字节(不是字符串) 的相关文章

  • Python、Tkinter、更改标签颜色

    有没有一种简单的方法来更改按钮中文本的颜色 I use button text input text here 更改按下后按钮文本的内容 是否存在类似的颜色变化 button color red Use the foreground设置按钮
  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • 如何生成给定范围内的回文数列表?

    假设范围是 1 X 120 这是我尝试过的 gt gt gt def isPalindrome s check if a number is a Palindrome s str s return s s 1 gt gt gt def ge
  • 如何打印没有类型的defaultdict变量?

    在下面的代码中 from collections import defaultdict confusion proba dict defaultdict float for i in xrange 10 confusion proba di
  • Flask 和 uWSGI - 无法加载应用程序 0 (mountpoint='')(找不到可调用或导入错误)

    当我尝试使用 uWSGI 启动 Flask 时 出现以下错误 我是这样开始的 gt cd gt root localhost uwsgi socket 127 0 0 1 6000 file path to folder run py ca
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • 如何使用装饰器禁用某些功能的中间件?

    我想模仿的行为csrf exempt see here https docs djangoproject com en 1 11 ref csrf django views decorators csrf csrf exempt and h
  • keras加载模型错误尝试将包含17层的权重文件加载到0层的模型中

    我目前正在使用 keras 开发 vgg16 模型 我用我的一些图层微调 vgg 模型 拟合我的模型 训练 后 我保存我的模型model save name h5 可以毫无问题地保存 但是 当我尝试使用以下命令重新加载模型时load mod
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • python 集合可以包含的值的数量是否有限制?

    我正在尝试使用 python 设置作为 mysql 表中 ids 的过滤器 python集存储了所有要过滤的id 现在大约有30000个 这个数字会随着时间的推移慢慢增长 我担心python集的最大容量 它可以包含的元素数量有限制吗 您最大
  • Python - 在窗口最小化或隐藏时使用 pywinauto 控制窗口

    我正在尝试做的事情 我正在尝试使用 pywinauto 在 python 中创建一个脚本 以在后台自动安装 notepad 隐藏或最小化 notepad 只是一个示例 因为我将编辑它以与其他软件一起使用 Problem 问题是我想在安装程序
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • Python 3 中“map”类型的对象没有 len()

    我在使用 Python 3 时遇到问题 我得到了 Python 2 7 代码 目前我正在尝试更新它 我收到错误 类型错误 map 类型的对象没有 len 在这部分 str len seed candidates 在我像这样初始化它之前 se
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • 在Python中重置生成器对象

    我有一个由多个yield 返回的生成器对象 准备调用该生成器是相当耗时的操作 这就是为什么我想多次重复使用生成器 y FunctionWithYield for x in y print x here must be something t
  • 类型错误:只能使用标量值执行操作

    如果您能让我知道如何为所提供的表格绘制一些信息丰富的图表 我将不胜感激here https www iasplus com en resources ifrs topics use of ifrs 例如 我需要一个名为 国内非上市公司 非上
  • Python:计算字典的重复值

    我有一本字典如下 dictA unit1 test1 alpha unit1 test2 beta unit2 test1 alpha unit2 test2 gamma unit3 test1 delta unit3 test2 gamm
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • 对输入求 Keras 模型的导数返回全零

    所以我有一个 Keras 模型 我想将模型的梯度应用于其输入 这就是我所做的 import tensorflow as tf from keras models import Sequential from keras layers imp

随机推荐

  • C++ 程序没有输出

    首先 很抱歉 如果这是错误的类别 因为我不确定这个问题的原因是什么 出于教育目的 我创建了一个小型 Hello World 应用程序 include
  • 当指令长度可变时的指令解码

    以下是一些指令及其对应的编码 55 push ebp 89 e5 mov esp ebp 83 ec 18 sub 0x18 esp a1 0c 9f 04 08 mov 0x8049f0c eax 85 c0 test eax eax 7
  • 如何在 Python 中为 Discord 服务器创建只能使用一次的特定数量的邀请链接

    我是使用 Discord 服务器的新手 我想创建一个私人 Discord 服务器 只有我邀请的用户才能加入 我读到了一些可以实现这一目标的方法 但它们都不是我真正想要的 我正在考虑创建一个 Discord 应用程序 该应用程序生成特定数量的
  • 使用 Jenkins 在管道中触发器中的时区

    我想使用管道通过触发器设置时区 我可以在作业配置中手动设置构建触发器 check Build periodically 日程 0 0 TZ Asia Seoul 这有效 但在管道中 以下语法有效 pipeline triggers cron
  • Twitter bootstrap select readonly 仍然可以更改选项

    我有一个引导选择readonly true 但我仍然可以更改所选选项 我需要disabled true 行为 但是当我使用它时 选择不会提交 我需要两者的组合 所选选项无法更改 但必须提交选择 我可以使用隐藏字段 但我希望有一个更简单的解决
  • 关于 getView() 的问题

    任何人都可以解释以下代码的作用吗 public View getView int position View convertView ViewGroup parent TODO Auto generated method stub View
  • 如何在节点中将 Hex 转换为 Uint8Array?

    我可以使用下面的代码将 Uint8Array 转换为十六进制 var bkh publicKey new Uint8Array 91 221 234 40 144 246 91 187 154 76 60 178 204 81 35 195
  • pickle 加载错误“__init__() 恰好需要 2 个参数(给定 1 个)”

    我的问题是自定义类已使用 pickle dump 保存 因为这些文件已保存 自定义类已更改 现在当我使用 pickle load 时出现此错误 是不是保存的文件有问题 错误 File cprprod extern lib python2 7
  • 这里是 Python 菜鸟:在支持 Python 的 Web 服务器上,如何使用 Python?

    usr bin env python coding UTF 8 enable debugging import cgitb cgitb enable print Content Type text plain charset utf 8 p
  • RecyclerView 中未从 Firebase 获取数据

    大家 我正在尝试制作一个音乐应用程序 为此 我创建了一个 Horizo ntalRecyclerView in my HomeFragment和我的水平RecyclerView正在获取带有艺术家姓名的图像 但单击后我加载了另一个活动 在我的
  • ContextMenu StaysOpen 不起作用

    我正在展示一个UserControl inside ContextMenu 此外在那UserControl我正在展示一个Popup其中包含一些按钮和数据网格 所有数据在Popup运行时加载 问题是ContextMenu忽略属性StaysOp
  • Google Drive Api 上传文件错误,错误代码为 500 内部服务器错误和 410 消失

    我正在通过可恢复 简单上传将文件上传到 Google 云端硬盘 具体取决于文件大小 我在上传谷歌文档文件时遇到问题500内部服务器错误 正如谷歌文档建议使用指数备份对于这个错误 我尝试在一段时间间隔后 一分钟后 上传相同的数据 gt 但它给
  • 使用实体框架 6 返回具有最大列值的记录

    试图获得最大记录datetime价值ReceivedDateTime列 但是数据集应该经过一些预先过滤Id列 不是唯一的 是这样解决的 using var db new SystemEntities var records db Table
  • Symfony2 更改树枝词法分析器

    我想更改 symfony2 中的默认树枝词法分析器 我创建了自定义控制器 为其设置服务 设置服务路线 将 twig lexer 注入到服务中 在我的控制器的构造函数中更改词法分析器 当我不使用插值时 结果呈现良好 但词法分析器仍然没有改变
  • Python 中元组字典键匹配的一个元素

    如果我有一个字典 例如 foo foo 45 5 bar 34 3 我如何检查该元组的一部分 if foo in foo should be true pass if 45 in foo also should be true 或者其他一些
  • WSO2 Synapse:设置 URL 参数

    我正在尝试做一些看似简单但无法使其发挥作用的事情 基本上我希望 WSO2 API 管理器向 REST 调用添加 URL 参数 设置和问题 我安装了 WSO2 API 管理器 我还有一个 Tomcat 运行着一个名为一些servlet它只是记
  • ARM Cortex-M4 中不同情况的条件汇编分支指令持续时间是多少?

    我试图确定下面简单延迟循环的时钟周期的确切持续时间 loop subs r2 r2 1 bne loop The Cortex M4 技术参考手册 https developer arm com documentation ddi0439
  • 如何使表格的某些列固定,某些列可滚动?

    我正在使用 twitter bootstrap 3 开发一个网页 有些表格不适合我的页面边距 它们溢出来了 所以我想创建一个像 Excel 电子表格一样工作的结构 最左边的两列 蓝色区域 将被固定 其余的列将尽可能显示 如果用户向右滚动表格
  • 查找 WPF 窗口的句柄

    Windows 窗体有一个属性 win1 Handle 如果我记得的话 它返回主窗口句柄的句柄 有没有等效的方法来获取 WPF 窗口的句柄 我在网上找到了以下代码 IntPtr windowHandle new WindowInteropH
  • Python 2 和 3 中的分块字节(不是字符串)

    事实证明这比我预期的要棘手 我有一个字节字符串 data b abcdefghijklmnopqrstuvwxyz 我想分块读取这些数据n字节 在 Python 2 下 只需稍加修改即可实现这一点grouper食谱来自itertools文档