红警3单位代码:Pytn3:以字节为单位的 x作为单词

我有一个 pytn3 脚本,它将数据读入一个缓冲区

fp = open("filename", 'rb')
data = fp.read(count)

我不完全理解 (即使在阅读文档之后) 什么read()返回。它似乎是某种可迭代的二进制数据。但它不是一个列表。

令人困惑的是,在脚本的其他地方,列表用于二进制数据。

frames = []
# then later... inside a loop
for ...
    data = b''.join(frames)

无论如何...我想遍历read()以字为单位返回的对象(又名 2 字节块)

目前脚本包含这个 for 循环

for c in data:
    # do something

是否有可能改变c,使得这个循环遍历字(2 字节块)而不是单个字节?

我不能在循环中使用read()一次读取 2 个字节。

1

我们可以使用.read(n)以二进制模式从文件中显式读取(最多)n字节(就像它从以文本模式打开的文件中读取nUnicode 代码点一样)。这是一个阻塞调用,只会在文件末尾读取较少的字节。

我们可以使用iter的两个参数形式来构建一个迭代器,该迭代器反复调用可调用的:

>>> help(iter)
Help on built-in function iter in module builtins:
iter(...)
    iter(iterable) -> iterator
    iter(callable, sentinel) -> iterator
    Get an iterator from an object.  In the first form, the argument must
    supply its own iterator, or be a sequence.
    In the second form, the callable is called until it returns the sentinel.

文件末尾的read将开始返回空结果,而不会引发异常,因此我们可以将其用于哨兵。

把它放在一起,我们得到:

for pair in iter(lambda: fp.read(2), b''):

在循环中,我们将获得表示两个字节数据的bytes对象。您应该检查文档以了解如何使用这些。

1

在二进制模式下读取文件时,会返回一个bytes对象,该对象也是标准的 pytn 内置方法之一。通常,它在代码中的表示形式看起来像字符串的表示形式,只是它的前缀为b" "-当您尝试打印它时,每个字节可能会显示一个转义,如\x**,其中**是 2 字节

currently accepted answer给出了在bytes对象中创建单个字节的list的示例:

L = [bytes_obj[i:i+1] for i in range(len(bytes_obj))]

我想这样修改它会为你工作:

L = [bytes_obj[i:i+2] for i in range(0, len(bytes_obj), 2)]

例如:

by = b"\x00\x01\x02\x03\x04\x05\x06" 
# The object returned by file.read() is also bytes, like the one above
words = [by[i:i+2] for i in range(0, len(by), 2)]
print(words)
# Output --> [b'\x00\x01', b'\x02\x03', b'\x04\x05', b'\x06']

或者创建一个生成器,如果您的列表可能太大而无法一次有效存储,则以相同的方式生成单词:

def get_words(bytesobject):
    for i in range(0, len(bytesobject), 2):
        yield bytesobject[i:i+2]
0

在最简单的字面意义上,这样的东西给你一个两个字节的时间循环。

with open("/etc/pwd", "rb") as f:
    w = f.read(2)
    while len(w) > 0:
        print( w  )
        w = f.read(2)

至于你从read得到什么,它是一个bytes对象,因为你已经指定了 'b' 作为 'open' 的选项

我认为一个更 pytn 的方式来表达它将通过迭代器或生成器。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(973)
Python编程简单代码:Python套接字编程简单的 Web服务器
上一篇
Xp算号器:仿真器未运行 WindowsXP
下一篇

相关推荐

  • python 大文件处理:如何使用Python处理大型文件

    Python 大文件处理指的是处理超过内存可以容纳的大文件。这种情况下,我们可以使用 Python 的内置函数 open() 来打开文件,并使用 read() 或 readlines() 来读取文件内容,以及 write() 来写入文件内容。…

    2023-08-11 13:08:46
    0 12 58
  • python培训心得体会:学习Python,拓展自我的可能性

    示例示例参加python培训,我受益匪浅。我深刻体会到了python的强大之处,它是一种高效、易学、易用的编程语言,可以让我们快速的实现编程思想,有效的提升编程效率。我也深刻理解了python的语法特点,比如变量、函数、类、模块等,以及它们之间的关系,这对以后的编程工作有很大的帮助。我还学习到了如何使用python进行数据处理,以及如何使用python实现web应用,这些都非常有用。下面是一个简单的python代码示例,用来计算1到100的和:…

    2023-07-19 02:14:49
    0 50 25
  • python求质因数:Python实现质因数分解的算法

    Python求质因数是指把一个正整数分解成若干个质数的乘积,这些质数就是该数的质因数。下面是一个Python代码实现求质因数的例子:…

    2023-03-04 13:27:16
    0 54 71
  • python基础问题:如何使用Python提高编程效率

    示例示例Python基础问题:如何在Python中定义函数答:在Python中定义函数的语法如下:def):…

    2023-07-19 07:08:57
    0 13 61
  • python面向:如何使用Python面向对象编程

    Python面向对象是一种面向对象编程(OOP)的范例,它能够让你创建可重用的代码,这样你就可以在构建应用程序时使用它们。下面是一个简单的Python面向对象的示例:…

    2023-04-01 09:37:30
    0 89 55
  • python计算1到100的和5050

    Python计算1到100的和的代码如下:上面的代码使用for循环来遍历1到100的数字,每次将遍历到的数字加到sum中,最后输出sum的值即可。…

    2023-10-03 12:08:18
    0 34 13
  • python 列表元素替换:使用Python创建美丽的图像

    Python 列表元素替换是指将列表中的某个元素替换成另一个元素,可以使用列表的 index() 方法和 insert() 方法来实现。…

    2023-08-29 09:24:30
    0 99 21
  • python prod函数:如何使用Python函数prod来提高生产效率

    Python prod 函数是一个内置函数,用于计算可迭代对象中元素的乘积。它接受一个可迭代对象作为参数,并返回该可迭代对象中元素的乘积。…

    2023-02-09 14:50:30
    0 89 17

发表评论

登录 后才能评论

评论列表(47条)