![](/img/trans.png)
[英]Trying to copy a set of specific strings from many text files in a directory and paste them in a new text file
[英]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.