1

我对 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()

谢谢一月

4

2 回答 2

3

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

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) 
于 2013-10-01T11:01:26.087 回答
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模块中的功能。

于 2013-10-01T11:05:08.247 回答