繁体   English   中英

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

总而言之,我不明白为什么我只有一个输出。 提前致谢 !

你能试试这个解决方案吗:

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,并在内部循环中使用它的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM