Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python-在输入文件中查找引用文件中出现的字符串_Python - Fatal编程技术网

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

python-在输入文件中查找引用文件中出现的字符串,python,Python,我有两个文件。调用一个文件作为参考文件。此文件包含一个字符串列表,每个字符串位于单独的行上。另一个文件是输入文件。它在每一行上都有字符串。 我想在输入文件中查找引用文件中每个字符串的出现位置。这是我的密码 def count_line_occurrences(ref_list,input_list): line_counter = {} # Initialization for ref_line in ref_list: ref_line = ref_line.rstrip(

我有两个文件。调用一个文件作为参考文件。此文件包含一个字符串列表,每个字符串位于单独的行上。另一个文件是输入文件。它在每一行上都有字符串。 我想在输入文件中查找引用文件中每个字符串的出现位置。这是我的密码

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上,我在这里遇到了一些问题。提前谢谢你的帮助。

这对我来说挺管用的。调用你的函数就像

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的输入数据后编辑

因此,输入的问题是没有正确清理尾随字符
\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}

你能定义“不工作”吗?谢谢你的回答。问题在于,我的参考列表显示为-['.Net Framework\n',7-Zip\n',ACT DCP\n',ActivePerl\n',ActiveState Komodo Edit\n',ActiveTCL\n',Adobe Flash Player\n',等等],我的输入列表显示为-['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'、…..等等'。因此,例如,在输入列表中找不到7-Zip\n。这是我的问题。谢谢。出于某种原因,我不喜欢这样。与此同时,我尝试了这种方法,它对我有效。ref_list=[string.strip(ref_项)对于ref_list中的ref_item]input_list=[string.strip(input_item)for input_list中的input_item],我将接受您的答案,因为这似乎是一种很好的替代方法。