繁体   English   中英

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

[英]Copy select lines from many text files and paste to new file

我是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模块,代码甚至可以更简单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
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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM