在python中逐行减去2个十六进制文件



有两个十六进制值的文件

0x42528566923Bd44c
0x55A5c6564546b54d
0x3266CD6565e566aa

file2.txt

0x3256AA323ab
0x669bbbb544c
0xa2545bcca55

使用python,我试图从file2.txt的第1行减去file1.txt的第1行,等等。我的代码

with open("file1.txt", "r") as f1:
line1 = f1.readline().strip()

def key1(line1):
x = int(line1, 16)
return (x)


with open("file2.txt", "r") as f2:
line2 = f2.readline().strip()

def key2(line2):
y = int(line2, 16)
return (y)

def add(f1, f2):
P = key1(line1)
Q = key2(line2)
R = P - Q
hx = hex(R).zfill(10)
print(hx+"n")

add(f1, f2) 

但我只能得到第一行减去值,而不是得到所有3行值。

问题是:line1 = f1.readline().strip()line2 = f2.readline().strip()。因为您只从每个文件中读取第一行,所以只有一个结果。您需要对所有行都这样做,而不仅仅是第一行。

读取所有行,并剥离每一行:

with open("file1.txt", "r") as f1:
line1 = [line.strip() for line in f1.readlines()]
with open("file2.txt", "r") as f2:
line2 = [line.strip() for line in f2.readlines()]

现在修改add函数签名:

def add(line1, line2):
P = key1(line1)
Q = key2(line2)
R = P - Q
hx = hex(R).zfill(10)
print(hx+"n")

key1key2功能是正常的,不需要修改。

现在,为文件中的每对行调用add,用zip:

并行迭代它们:
for i,j in zip(line1, line2):
add(i, j)

输出:

0x425282412798b0a1
0x55a5bfec898b6101
0x3266c34020289c55

答案

你好,这里的关键是readlines()(不是官方文档,但有趣https://www.geeksforgeeks.org/read-a-file-line-by-line-in-python/)。因此,修改后的代码可以是:

def key1(line1):
x = int(line1, 16)
return (x)

def key2(line2):
y = int(line2, 16)
return (y)

def add(f1, f2):
file1 = open(f1, 'r')
file2 = open(f2, 'r')
lines1 = file1.readlines()
lines2 = file2.readlines()
for i in range(len(lines1)):
P = key1(lines1[i])
Q = key2(lines2[i])
R = P - Q
hx = hex(R).zfill(10)
print(hx+"n")
file1.close()
file2.close()
add("file1.txt", "file2.txt") 

如果两个文件有完全相同的行数,这段代码工作,它不处理任何异常,这取决于你:)

相关内容

最新更新