我有两个文件。调用一个文件作为引用文件。该文件包含一个字符串列表,每个字符串各占一行。另一个文件是输入文件。每行都有字符串。 我想找到输入文件中引用文件中每个字符串的出现次数。这是我的代码
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 ...这不是预期的行为吗?
看到@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}
关于python - 从输入文件中的引用文件中查找字符串的出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6225590/