我对脚本非常陌生,因此我不确定如何最好地合并一系列文件。我正在尝试创建一个质量控制脚本,确保每晚负载正确上传到数据库(我们注意到,如果由于某种原因存在滞后,同步将排除在所述延迟期间出现的任何捐赠)。
我有一个日常同步文件的目录,标记为:
20161031_donations.txt
20161030_donations.txt
20161029_donations.txt
20161028_donations.txt
etc etc
每个文件都有相同的标题。
我想将最近7天的文件合并到一个只有1个标题行的文件中。我主要是在理解如何通配日期范围。我只做过:
for i in a.txt b.txt c.txt d.txt
do this
done
适用于静态合并,但不能动态集成到正确的QC脚本中。
我有一个unix背景但想在python中这样做。我是python的新手,所以请在任何建议中解释。
答案 0 :(得分:1)
您的日期格式的优势(假设它没有填充,例如2月3日的20160203
),它可以按字母顺序排序!所以你可以这样做:
from glob import glob
for path in sorted(glob('*_donations.txt'))[-7:]:
with open(path) as f:
# get the content for merging
这将获得最新的7个文件,从最旧的文件开始。 This is why ISO 8601 is the best date format
答案 1 :(得分:1)
扩展Alex Hall的答案,您可以从一个文件中获取标题并跳过其余文件进行合并
from glob import glob
from shutil import copyfileobj
files = sorted(glob('*_donations.txt'))[-7:]
# if you want most recent file first do
# files.reverse()
with open("merged_file.txt", "w") as outfp:
for i, filename in enumerate(files):
with open(filename) as infile:
if i:
next(infile) # discard header
copyfileobj(infile, outfile) # write remaining