我在这个网站上找到了以前搜索的很多信息,但我似乎被困在以下问题上。
我有两个文本文件,看起来像这样
Inter.txt (n线,但只显示4行,你明白了(
7275
30000
6693
855
....
规则.txt(2n 行(
7275
8500
6693
7555
....
3
1000
8
5
....
我想将国际米兰的第一行.txt与规则进行比较.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的新手。
综上所述,我不明白为什么我只有一个输出。提前感谢!
好的,我认为阻止您前进的主要原因是文件上的 for 循环获取指向文件末尾的指针,并且在您再次启动循环时不会重置。
因此,当您只打开规则.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
你能试试这个解决方案吗:
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]
希望它对你有用!