我有两个文件。将一个文件称为参考文件。此文件包含每个单独行上的字符串列表。另一个文件是输入文件。它每行都有字符串。 我想从输入文件中的引用文件中找到每个字符串的出现。这是我的代码
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,我在这里遇到问题。在此先感谢您的帮助。
答案 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}