python - 从输入文件中的引用文件中查找字符串的出现次数

时间:2011-06-03 09:59:37

标签: python

我有两个文件。将一个文件称为参考文件。此文件包含每个单独行上的字符串列表。另一个文件是输入文件。它每行都有字符串。 我想从输入文件中的引用文件中找到每个字符串的出现。这是我的代码

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

答案 0 :(得分: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}