Skip to main content
 首页 » 编程设计

python之从许多文本文件中复制选择行并粘贴到新文件

2025年05月04日17Leo_wl

我是 Python 的新手,并尝试使用它来完成我认为应该是一项非常简单的任务。我有一个包含许多 .log 文件的文件夹,每个文件都有很多行数据。我想复制只包含某个关键字的行,并将每个文件中的每一行粘贴到一个我可以在 excel 中打开的主文件中。我一直在寻找答案,但似乎无法使任何工作正常进行。

请您参考如下方法:

这应该可以满足您的需求。将包含此代码的文件放在您拥有 .log 文件的目录中,将 KEYWORD 替换为您实际要查找的内容,然后运行它。

import os 
theKeyword = 'KEYWORD' 
directory = '.'  
with open('output.csv', 'w') as out: 
    for file in os.listdir(directory): 
        if file.endswith(".log"): 
            with open(file, 'r') as f: 
                for line in f: 
                    if theKeyword in line: 
                        out.write(line) 

按照建议,您可以使用 glob而不是 os.listdir :

from glob import glob 
with open('output.csv', 'w') as out: 
    for file in glob('*.log'): 
        with open(file, 'r') as f: 
            for line in f: 
                if 'KEYWORD' in line: 
                    out.write(line) 

如果使用 fileinput,代码会更简单一些模块:

from glob import glob 
import fileinput 
with open('output.csv', 'w') as out: 
    for line in fileinput.input(glob('*.log')): 
        if 'KEYWORD' in line: 
            out.write(line) 

“Python 中的 grep”的另一种变体:

from glob import glob 
import fileinput 
with open('output.csv', 'w') as out: 
    out.writelines(line for line in fileinput.input(glob('*.log')) if 'KEYWORD' in line) 

在上面的代码片段中,如果您删除 fileinput.input 的参数,那么它将处理 sys.argv[1:],因此您可以运行您的脚本以文件名作为参数。

如果您想在目录的子目录中递归搜索文件,您应该看看 os.walk功能。

如果你有 Linux/Unix/Mac 机器,或者如果你有 Cygwin安装在 Windows 机器上,使用 shell 工具可以更容易地实现同样的目的:

$ cat *.log| grep KEYWORD >output.csv