python - 在输入文件中查找参考文件中的字符串出现次数

2 投票
1 回答
646 浏览
提问于 2025-04-16 18:53

我有两个文件。一个文件叫做参考文件,这个文件里有一堆字符串,每个字符串占一行。另一个文件是输入文件,它也每行都有字符串。

我想要找出参考文件里的每个字符串在输入文件中出现的次数。这是我的代码:

def count_line_occurrences(ref_list,input_list):
  line_counter = {}
  # Initialization
  for ref_line in ref_list:
    ref_line = ref_line.rstrip()
    line_counter[ref_line] = 0
  for input_line in input_list:
      input_line = input_line.rstrip()

  for ref_line in ref_list:
    #print ref_line
    for input_line in input_list:
      #print input_line
      if str(input_line).find(str(ref_line)) != -1:
        print 'found ' + ref_line
        line_counter[ref_line] += 1
  return line_counter

不过这个代码没有正常工作。需要说明的是,这不是一个作业问题,而是一个更大任务的一部分。而且奇怪的是,我在Perl语言中实现的这个部分是可以正常工作的。我想把这个项目转到Python上,但在这里遇到了一些问题。提前谢谢大家的帮助。

1 个回答

3

对我来说,这个方法有点用。像这样调用你的函数...

if __name__ == "__main__":
    x = count_line_occurrences(["a","b","c"],["c","c","b","a"])
    print x

会输出...

found a
found b
found c
found c
{'a': 1, 'c': 2, 'b': 1}

@Sumod ... 这不是预期的结果吗?

在看到@Sumod的输入数据后更新

你输入的问题在于没有正确清理掉末尾的字符 \t\n

下面的代码可以正常工作...

def count_line_occurrences(ref_list,input_list):
  line_counter = {}

  ref_list = map(lambda x: x.strip(" \t\n"),ref_list)
  input_list = map(lambda x: x.strip(" \t\n"),input_list)

  # Initialization
  for ref_line in ref_list:
    line_counter[ref_line] = 0

  for ref_line in ref_list:
    #print ref_line
    for input_line in input_list:
      #print input_line
      if str(input_line).find(str(ref_line)) != -1:
        print 'found ' + ref_line
        line_counter[ref_line] += 1
  return line_counter

注意,在初始化你的计数器之前,我先对两个输入列表进行了清理...

ref_list = map(lambda x: x.strip(" \t\n"),ref_list)
input_list = map(lambda x: x.strip(" \t\n"),input_list)

在Python中,string.strip 函数可以接收我想要清理的字符。

对于输入...

    ref_list = ['.Net Framework\n', '7-Zip\n', 'ACT DCP \n', 'ActivePerl \n', 'ActiveState Komodo Edit\n', 'ActiveTCL \n', 'Adobe Flash Player\n']
    input_list = ['7-Zip 4.57\t\n', 'WebEx\t\n', 'Adobe Acrobat Reader 8.0.0\t\n', 'Adobe Flash Player 10 ActiveX\t10.0.32.18\n']
    x = count_line_occurrences(ref_list,input_list)
    print x

我得到了...

{'ActiveState Komodo Edit': 0, '.Net Framework': 0, 'ACT DCP': 0, 'ActivePerl': 0, 'Adobe Flash Player': 1, '7-Zip': 1, 'ActiveTCL': 0}

撰写回答