我是Python的新手,并尝试使用它来做我认为应该是一项非常简单的任务。我有一个包含许多.log文件的文件夹,每个文件都包含许多行数据。我想复制只包含某个关键字的行,并将每个文件的每一行粘贴到一个我可以在excel中打开的主文件中。我一直在寻找答案,我似乎无法得到任何工作。
答案 0 :(得分: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
module:
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)
'grep in Python'的另一种变体:
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
答案 1 :(得分: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()