根据日期范围组合文件

时间:2016-10-31 19:48:32

标签: python bash unix python-datetime

我对脚本非常陌生,因此我不确定如何最好地合并一系列文件。我正在尝试创建一个质量控制脚本,确保每晚负载正确上传到数据库(我们注意到,如果由于某种原因存在滞后,同步将排除在所述延迟期间出现的任何捐赠)。

我有一个日常同步文件的目录,标记为:

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的新手,所以请在任何建议中解释。

2 个答案:

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