我是 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
