Python:如何比较两个文本文件中的字符串并在匹配的情况下检索一个附加行
Python: How to compare string from two text files and retrieve an additional line of one in case of match
我以前在这个网站上搜索过很多信息,但我似乎卡在了以下问题上。
我有两个这样的文本文件
Inter.txt(n行但只显示4行,你懂的)
7275
30000
6693
855
....
rules.txt(2n 行)
7275
8500
6693
7555
....
3
1000
8
5
....
我想将 Inter.txt 的第一行与 rules.txt 进行比较,如果匹配,我跳转 n 行以获得该行的分数。 (比如7275,有匹配,我跳n得到3分)
我生成了以下代码,但由于某些原因,当我应该为我的第一个文件中的每个匹配项输出一个时,我只有第一行的输出。对于前面的示例,我应该将 8 作为 6693 的输出。
import linecache
inter = open("Inter.txt", "r")
rules = open("rules.txt", "r")
iScore = 0
jump = 266
i=0
for lineInt in inter:
#i = i+1
#print(i)
for lineRul in rules:
i = i+1
#print(i)
if lineInt == lineRul:
print("Match")
inc = linecache.getline("rules.txt", i + jump)
#print(inc)
iScore = iScore + int(inc)
print(iScore)
#break
else:
continue
所有的 print(i) 都在那里,因为我检查了所有的行都被读取了。我是Python.
的新手
综上所述,我不明白为什么我只有一个输出。提前致谢!
你能试试这个解决方案吗:
def get_rules_values(rules_file):
with open(rules_file, "r") as rules:
return map(int, rules.readlines())
def get_rules_dict(rules_values):
return dict(zip(rules_values[:len(rules_values)/2], rules_values[len(rules_values)/2:]))
def get_inter_values(inter_file):
with open(inter_file, "r") as inter:
return map(int, inter.readlines())
rules_dict = get_rules_dict(get_rules_values("rules.txt"))
inter_values = get_inter_values("inter.txt")
for inter_value in inter_values:
print inter_value, rules_dict[inter_value]
希望它对你有用!
好的,我认为阻碍您前进的主要因素是文件上的 for 循环获取指向文件末尾的指针,并且在您再次开始循环时不会重置。
所以当你只打开 rules.txt 一次,并在内部循环中使用它的实例时,它只会在外部循环的第一次迭代中遍历所有行,第二次尝试遍历仍然是非行。
解决办法是在内循环外关闭和打开文件。
此代码对我有用。
import linecache
inter = open("Inter.txt", "r")
iScore = 0
jump = 4
for lineInt in inter:
i=0
#i = i+1
#print(i)
rules = open("rules.txt", "r")
for lineRul in rules:
i = i+1
#print(i)
if lineInt == lineRul:
print("Match")
inc = linecache.getline("rules.txt", i + jump)
#print(inc)
iScore = iScore + int(inc)
print(iScore)
#break
else:
continue
rules.close()
我也将 i 设置为 0 的位置移到了外循环的开头,但我猜你会自己找到它。
并且我将跳转更改为 4 以适合您提供的示例文件:p
我以前在这个网站上搜索过很多信息,但我似乎卡在了以下问题上。
我有两个这样的文本文件
Inter.txt(n行但只显示4行,你懂的)
7275
30000
6693
855
....
rules.txt(2n 行)
7275
8500
6693
7555
....
3
1000
8
5
....
我想将 Inter.txt 的第一行与 rules.txt 进行比较,如果匹配,我跳转 n 行以获得该行的分数。 (比如7275,有匹配,我跳n得到3分)
我生成了以下代码,但由于某些原因,当我应该为我的第一个文件中的每个匹配项输出一个时,我只有第一行的输出。对于前面的示例,我应该将 8 作为 6693 的输出。
import linecache
inter = open("Inter.txt", "r")
rules = open("rules.txt", "r")
iScore = 0
jump = 266
i=0
for lineInt in inter:
#i = i+1
#print(i)
for lineRul in rules:
i = i+1
#print(i)
if lineInt == lineRul:
print("Match")
inc = linecache.getline("rules.txt", i + jump)
#print(inc)
iScore = iScore + int(inc)
print(iScore)
#break
else:
continue
所有的 print(i) 都在那里,因为我检查了所有的行都被读取了。我是Python.
的新手综上所述,我不明白为什么我只有一个输出。提前致谢!
你能试试这个解决方案吗:
def get_rules_values(rules_file):
with open(rules_file, "r") as rules:
return map(int, rules.readlines())
def get_rules_dict(rules_values):
return dict(zip(rules_values[:len(rules_values)/2], rules_values[len(rules_values)/2:]))
def get_inter_values(inter_file):
with open(inter_file, "r") as inter:
return map(int, inter.readlines())
rules_dict = get_rules_dict(get_rules_values("rules.txt"))
inter_values = get_inter_values("inter.txt")
for inter_value in inter_values:
print inter_value, rules_dict[inter_value]
希望它对你有用!
好的,我认为阻碍您前进的主要因素是文件上的 for 循环获取指向文件末尾的指针,并且在您再次开始循环时不会重置。
所以当你只打开 rules.txt 一次,并在内部循环中使用它的实例时,它只会在外部循环的第一次迭代中遍历所有行,第二次尝试遍历仍然是非行。
解决办法是在内循环外关闭和打开文件。 此代码对我有用。
import linecache
inter = open("Inter.txt", "r")
iScore = 0
jump = 4
for lineInt in inter:
i=0
#i = i+1
#print(i)
rules = open("rules.txt", "r")
for lineRul in rules:
i = i+1
#print(i)
if lineInt == lineRul:
print("Match")
inc = linecache.getline("rules.txt", i + jump)
#print(inc)
iScore = iScore + int(inc)
print(iScore)
#break
else:
continue
rules.close()
我也将 i 设置为 0 的位置移到了外循环的开头,但我猜你会自己找到它。
并且我将跳转更改为 4 以适合您提供的示例文件:p