有两个十六进制值的文件
中
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")
key1
和key2
功能是正常的,不需要修改。
现在,为文件中的每对行调用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")
如果两个文件有完全相同的行数,这段代码工作,它不处理任何异常,这取决于你:)