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