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

2024-04-23 16:01:46 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我有两个像这样的文本文件

在内部.txt(n行但只显示4行,你明白了)

7275
30000
6693
855
....

在规则.txt(2n行)

^{pr2}$

我想比较第一行内部.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

所有的印刷品都在那里,因为我检查了所有的行都读过了。我是Python的新手。在

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


Tags: intxtfor网站规则openrulesinc
2条回答

好吧,我认为阻止你前进的主要原因是文件上的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]

希望对你有用!在

相关问题 更多 >