搜索文本文件并将结果保存到另一个文本文件

时间:2013-10-01 10:57:18

标签: python file search text

我是python的新手,并且只有非常有限的编程技巧。我希望你能在这里帮助我。

我有一个大文本文件,我正在搜索特定的单词。带有这个单词的每一行都需要存储到另一个txt文件中。

我可以搜索文件并在控制台中打印结果,但不能打印到其他文件。我该如何管理?

f = open("/tmp/LostShots/LostShots.txt", "r")

searchlines = f.readlines()
f.close()
for i, line in enumerate(searchlines):
    if "Lost" in line: 
        for l in searchlines[i:i+3]: print l,
        print

f.close()

THX 扬

2 个答案:

答案 0 :(得分:2)

使用with上下文管理器,不要使用readlines(),因为它会将文件的全部内容读入列表。而是逐行迭代file object并查看是否存在特定单词;如果是 - 写入输出文件:

with open("/tmp/LostShots/LostShots.txt", "r") as input_file, \ 
     open('results.txt', 'w') as output_file:

    for line in input_file:
        if "Lost" in line:
            output_file.write(line) 

请注意,对于python< 2.7,with中不能有多个项目:

with open("/tmp/LostShots/LostShots.txt", "r") as input_file:
    with open('results.txt', 'w') as output_file:

        for line in input_file:
            if "Lost" in line:
                output_file.write(line) 

答案 1 :(得分:1)

要正确匹配单词,您需要正则表达式;一个简单的word in line检查也匹配我认为你不想要的blablaLostblabla

import re

with open("/tmp/LostShots/LostShots.txt", "r") as input_file, \ 
        open('results.txt', 'w') as output_file:

    output_file.writelines(line for line in input_file
                           if re.match(r'.*\bLost\b', line)

或者你可以使用更多罗嗦的

    for line in input_file:
        if re.match(r'.*\bLost\b', line)):
            output_file.write(line)

作为旁注,您应该使用os.path.join来制作路径;另外,要以跨平台方式处理临时文件,请参阅tempfile模块中的函数。