在 Python 中读取和解释二进制文件中的数据

2024-04-03

我想逐字节读取文件并检查每个字节的最后一位是否已设置:

#!/usr/bin/python

def main():
    fh = open('/tmp/test.txt', 'rb')
    try:
        byte = fh.read(1)
        while byte != "":
            if (int(byte,16) & 0x01) is 0x01:
                print 1
            else:
                print 0
            byte = fh.read(1)
    finally:
        fh.close

    fh.close()

if __name__ == "__main__":
        main()

我得到的错误是:

Traceback (most recent call last):
  File "./mini_01.py", line 21, in <module>
    main()
  File "./mini_01.py", line 10, in main
    if (int(byte,16) & 0x01) is 0x01:
ValueError: invalid literal for int() with base 16: '\xaf'

有人有想法吗?我没有成功使用 struct 和 binascii 模块。


尝试使用bytearray http://docs.python.org/py3k/library/functions.html#bytearray类型(Python 2.6 及更高版本),它更适合处理字节数据。你的try块就是:

ba = bytearray(fh.read())
for byte in ba:
    print byte & 1

或创建结果列表:

low_bit_list = [byte & 1 for byte in bytearray(fh.read())]

这是有效的,因为当你索引一个bytearray您只是返回一个整数(0-255),而如果您只是从文件中读取一个字节,您将返回一个字符串,因此需要使用ord http://docs.python.org/library/functions.html#ord将其转换为整数。


如果您的文件太大而无法轻松保存在内存中(尽管我猜不是),那么mmap http://docs.python.org/library/mmap.html可以用来创建bytearray从缓冲区:

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

在 Python 中读取和解释二进制文件中的数据 的相关文章

随机推荐

  • IntelliJ Idea Maven 项目中 Scala 模块的 Scala 签名错误

    免责声明 我是 Scala 新手 尝试在 IntelliJ IDEA 中使用简单的 scala archtype 创建示例 Scala Maven 项目 IntelliJ 版本是 14 1 2 下面是我的 pom 文件 我确实将 Scala
  • 未找到 GraphViz 的可执行文件:Anaconda-3

    我正在尝试显示树输出 但是当我运行下面的脚本时 我收到如下错误 IncationException 未找到 GraphViz 的可执行文件 我在这里搜索过类似的主题 但其中大多数与 Mac 相关 我使用的是 Windows 10 64 位操
  • 类常量

    我有几个 obj c 类 每个类都需要一些在 switch 语句中使用的常量 我曾尝试使用以下命令在 m 文件中定义这些数字常量 define预处理器指令 所有这些常量都以 kCell 开头 这似乎工作得很好 但 Xcode 的代码感知向我
  • 是否可以设置 git merge 来自动解析? (git 雷雷雷)

    我有 2 台笔记本电脑 其中有一个纯文本文件 该文件必须同步 它用作第三方软件的数据库 客户希望每天同步该文件的内容 第一个想法是制作一个将文件上传到 Dropbox 的脚本 但如果发生冲突 两个用户删除 A 行 第一个用户添加 B 行 第
  • 如何使用slf4j和java.util.logging登录tomcat

    我创建了一个在 Tomcat 8 上运行的 Web 应用程序 一如既往 我想使用 slf4j 在本例中 由 java util logging 支持 因为它是 Tomcat 的默认设置 相关依赖是这样的
  • 返回对 C++ 中静态局部变量的引用

    这个问题只是为了我更好地理解C 中的静态变量 我认为如果将 C 中的局部变量声明为静态 我可以返回对它的引用 因为该变量应该在函数返回后继续存在 为什么这不起作用 include
  • 如何解决Admob执行异常?

    我一直在尝试在我的全新应用程序中实施 Google Admob 广告 我已经处理错误代码 0 内部错误 和 广告 错误等待未来 异常几个小时了 从今天早上起 我就有了一个带有付款方式的 Admob 帐户 我一直在使用我的凭据关注 Googl
  • Tectonicus 2.25 的 XML 文件错误

    我正在尝试为我的单人游戏世界制作一张 Tectonicus 地图 因此我需要一个 XML 配置文件 但是当尝试制作地图时 我在终端 MAC OSX 中收到此错误 Parsing config from Users ralphvandenhe
  • 我无法找到 libftdi 的 mpsse (SPI) 模式的示例代码

    这不是一个家庭作业问题 尽管这是一个工作问题 几个月前 我刚写完一份规范 老板就会把它外包出去 因为资金紧张 所以我正在尝试自己做这件事 我是一个很弱的 C 编码员 如果 gcc 能输出一些运行时不会出现段错误的东西 或者有时根本没有任何东
  • 从 Spring MVC @RestController 返回视图

    As RestController是组成 Controller and ResponseBody 我相信如果我希望我的控制器同时工作 MVC 和 REST 控制器只需注释 RestController应该没事 那是对的吗 As RestCo
  • 从 App Store 中删除应用程序

    我按照以下步骤从 App Store 中删除了我的应用程序 但我没有看到任何 删除 选项 http msdn microsoft com en us library windows apps jj193601 aspx http msdn
  • 尝试创建一个脚本,如果提交者回答错误,该脚本会在表单提交时向提交者发送电子邮件

    我正在查看表单提交 如果提交者填写了任何错误的问题 则向提交者发送电子邮件 但脚本也会向所有输入正确的提交者发送电子邮件 我知道 if 脚本可以处理数字 就像我在另一个项目中使用它一样 但是当我将问题更改为 true false 时 它 似
  • 我应该使用哪个命名空间和程序集来声明共享项目中的转换器

    我应该使用哪个命名空间和程序集在 Xamarin 中的共享项目中声明转换器 对于该资源
  • 如何使用 Struts 预防 XSS 漏洞

    我们需要在 Struts 应用程序中添加反 XSS 支持 最具体地说 架构师要求所有用户输入在存储到数据库之前必须进行 清理 由于我不想重新发明方轮 我可以使用哪个 Java 库来实现此目的 以及把它放在哪里 理想情况下 它应该是可配置的
  • 在 docker 容器中使用 uwsgi 和 nginx 设置 Flask 应用程序

    我正在尝试在 Docker 容器中运行带有 Flask uwsgi 和 nginx 的 Docker 容器 我的 Dockerfile 看起来是这样的 FROM ubuntu 16 04 MAINTAINER Dockerfiles Ins
  • 如何更新推送通知的配置文件 - IOS

    我们正在开发一个IOS应用程序 我们想要实现推送通知 我已经浏览了苹果文档 并要求我的团队代理在iOS开发中心启用推送通知 他们似乎做到了 现在已经启用了 我已经在我的应用程序中注册了推送通知 如下所示 UIApplication shar
  • 寻找有关在 Windows 7 上安装应用程序的“正确”方法的文档

    我正在使用一些遗留应用程序 10 15 年 并试图找到有关在 Windows 7 上安装和运行它们 以及任何用户应用程序 的 正确 方法的指导 而无需完全的管理员权限 换句话说 可执行文件 只读文件应存放在何处 用户数据 读写文件应存放在何
  • Linux Entity Framework Core 上的 SQL Server 连接字符串无效

    我使用的是Linux 更具体地说是Xubuntu 我已在我的计算机上安装了 SQL Server Express 我目前正在制作一个网络应用程序 但我的连接似乎无法正常工作 或者我不太理解所有内容 我得到的输出是 A network rel
  • 在 Java 中使用一组固定字母将 long 编码/解码为字符串

    给定一组任意字母 String range 0123456789abcdefghijklmnopABCD 我正在寻找两种从长 字符串进行编码 解码的方法 String s encode range l and long l decode r
  • 在 Python 中读取和解释二进制文件中的数据

    我想逐字节读取文件并检查每个字节的最后一位是否已设置 usr bin python def main fh open tmp test txt rb try byte fh read 1 while byte if int byte 16