【问题标题】:How to do 1s compliment on all files in a directory如何对目录中的所有文件进行 1s 恭维
【发布时间】:2017-07-25 06:00:22
【问题描述】:

我正在寻找是否有一种方法可以自动执行 1s 恭维或翻转一个或多个文件中的位。我设法使用语法“file = open('001.a','rb')”打开二进制文件,然后通过堆栈溢出搜索找到一个while循环进行迭代。

当我将变量分配给文件的读取部分时,例如。 a = file.read() 然后在 a[1] 上输入,它显示为类型“str”。

我很困惑,如果我将此文件作为二进制文件打开,那么不应该所有内容都显示为 1 和 0。

抱歉,我真的是编程新手,完全迷路了。我已经搜索并查看了很多示例,但它们似乎都没有给出完整的解决方案,并且从不同的帖子中挑选和混合代码不起作用,因为我不断收到类型错误。我尝试使用 struct 但只是不理解语法或它应该实现什么。

我认为我需要将该字符串转换为 1 和 0 的二进制文件,然后以某种方式将所有 0 翻转为 1,将 1 翻转为 0,但这似乎说起来容易做起来难。

一个[:10] '\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff'

谢谢

【问题讨论】:

    标签: python python-2.7 hex bin


    【解决方案1】:

    这样可以吗:

    with open("/tmp/xyzzy.tmp", "rb") as fp:
        q = fp.read()
    
    nf = open("/tmp/xyzzy.new", "ab")    
    for i in q:
        newbyte = ord(i) ^ 255
        nf.write(chr(newbyte))   
    
    nf.close()
    

    它只是逐个字节地旋转您的数据并在运行时翻转位。

    【讨论】:

    • 非常感谢您。我一会儿试试。我只有2个问题。 1)当您使用“rb”打开文件时,它应该以二进制打开。我认为这意味着如果你打印 q 那么它应该打印 0 和 1 但它似乎没有这样做。该文件不应该是二进制文件。我正在使用 python 2.7 2)似乎变量 q 被分配来读取整个文件,那么它如何在一个字节上工作。我的意思是如果你打印 q 它会打印出整个文件。
    • 上面的代码对我不起作用。当我键入 nf.close() 时,它给出了一个语法错误:idleFile "" 中的无效语法,第 4 行带有一个指向 nf.close() 的指针。发送
    • stackoverflow.com/questions/9644110/…这是二进制模式的解释。
    • 语法错误只是复制粘贴问题,因为在 for 循环和 nf.close() 之后没有换行。如果你复制粘贴到 python,你需要一个换行符来打破 for 循环缩进。现在就试试。如果作为脚本运行,原始版本也可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 2016-02-08
    • 2013-02-23
    • 2013-12-13
    • 1970-01-01
    • 2015-02-01
    相关资源
    最近更新 更多