Python:如何比较两个文本文件中的字符串,并在匹配时检索另一行

时间:2017-04-07 13:33:27

标签: python for-loop compare readfile

我在此网站上发现了之前搜索的大量信息,但我似乎陷入了以下问题。

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

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的新手。

总结一下,我不明白为什么我只有一个输出。提前谢谢!

2 个答案:

答案 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