我在此网站上发现了之前搜索的大量信息,但我似乎陷入了以下问题。
我有两个看起来像这样的文本文件
Inter.txt(n行,但只显示4行,你明白了)
7275
30000
6693
855
....
rules.txt(2n-lines)
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
所有的印刷品(i)都在那里因为我检查了所有的线都被读了。我是Python的新手。
总结一下,我不明白为什么我只有一个输出。提前谢谢!
答案 0 :(得分:0)
请你试试这个解决方案:
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]
希望它能为你效用!
答案 1 :(得分:0)
好吧,我认为阻止你前进的主要因素是文件上的for循环获取指向文件末尾的指针,并且当你再次启动循环时不会重置。
因此,当你只打开一次rules.txt,并在内部循环中使用它的intance时,它只会在外循环的第一次迭代中遍历所有行,第二次尝试遍历遗留行,不是。
解决方案是关闭并打开内循环外的文件。 这段代码对我有用。
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