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

时间:2013-04-08 19:30:00

标签: python

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

2 个答案:

答案 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()