1

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

4

2 回答 2

6

这应该做你需要的。将包含此代码的文件放在您拥有.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 机器,或者如果您在 Windows 机器上安装了Cygwin,则使用 shell 工具可以更轻松地实现相同的目标:

$ cat *.log| grep KEYWORD >output.csv
于 2013-04-08T19:44:21.313 回答
1
import os

outfile = open("outfile.txt", "w")
temp_list = []
for cur_file in os.listdir("."):
    if cur_file.endswith(".log"):
        for line in open(cur_file, "r").readlines():
            if "KEYWORD" in line:
                outfile.write(line)
outfile.close()
于 2013-04-08T19:48:10.683 回答