逻辑" OR" bin文件之间

时间:2015-06-21 19:47:02

标签: python

我试图编写一个脚本来获取文件列表并执行"逻辑或"它们之间。正如您在脚本中看到的那样,在第一阶段我创建了一个空append_buffer。然后我想对列表中的所有文件进行逻辑OR。

我的问题是,当我读取文件时,我得到str而不是bytearray。所以当我尝试执行or失败时。我试图转换它没有任何成功。

        import struct
        #import sys, ast

        buffera = bytearray()
        append_buffer = bytearray()
        output_buffer = bytearray()

        files_list=['E:\out.jpg','E:\loala2.jpg','E:\Koala.jpg','E:\loala2.jpg']
        print(files_list[1])


        #######################################################################################################################
        # create_dummy_bin_file_for_first_iteration , base on first file size
        temp_file = open(files_list[1], "rb")
        print ( temp_file )
        buffera = temp_file.read(temp_file.__sizeof__())
        temp_file.close()

        for x in range(0, len(buffera)):
            append_buffer.append(0x00)
        #######################################################################################################################

        for i in range(1, len(files_list)):
            print( files_list[i] )
            file = open(files_list[i], "rb")
            file_buffer = file.read(file.__sizeof__())
            file.close()

            if ( len(file_buffer) != len(append_buffer) ):
                print("Can't merge different size bin files ")
                exit(1)
            else:

                for x in range(0, len(buffera)):
                    or_data=(file_buffer[x] | append_buffer[x])
                    print("---")
                    print(type(file_buffer[x]))
                    print(file_buffer[x])

                    print("---")
                    print(type(append_buffer[x]))
                    print(append_buffer[x])



        outputfile = open(files_list[0], "wb")
        outputfile.write(output_buffer)
        outputfile.close()

2 个答案:

答案 0 :(得分:1)

您可以使用ordchr运算符将每个字符转换为整数并返回。

使用它,您的代码将是:

or_data=chr(ord(file_buffer[x]) | ord(append_buffer[x]))

答案 1 :(得分:0)

此代码示例使完整的内存工作。

# Read data from the first file
with open("file1.txt", "rt") as f:
    d1 = f.read()

# Read data from the second file
with open("file2.txt", "rt") as f:
    d2 = f.read()

# Make sure that both sizes are equal
assert len(d1) == len(d2)

# Calculate OR-ed data
d3 = "".join(chr(ord(d1[i]) | ord(d2[i])) for i in range(len(d1)))

# Write the output data
with open("file3.txt", "wt") as f:
    f.write(d3)

也可以逐字节处理这些数据,以减少内存消耗。