我试图编写一个脚本来获取文件列表并执行"逻辑或"它们之间。正如您在脚本中看到的那样,在第一阶段我创建了一个空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()
答案 0 :(得分:1)
您可以使用ord
和chr
运算符将每个字符转换为整数并返回。
使用它,您的代码将是:
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)
也可以逐字节处理这些数据,以减少内存消耗。