Python:如何比较两个文本文件中的字符串,并在匹配的情况下检索额外的一行



我在这个网站上找到了以前搜索的很多信息,但我似乎被困在以下问题上。

我有两个文本文件,看起来像这样

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]

希望它对你有用!

相关内容

  • 没有找到相关文章

最新更新