別のフォルダ内のすべてのファイルを1つのファイルにマージして改行を追加する方法

別のフォルダ内のすべてのファイルを1つのファイルにマージして改行を追加する方法

フォルダとファイルが多すぎます。これが私の構造です。

26-09-2016/CHANGELOG_20160926.TXT
26-09-2016/FILE_CHANGELOG_20160926.TXT
27-09-2016/CHANGELOG_20160927.TXT
27-09-2016/FILE_CHANGELOG_20160927.TXT

以下の出力が必要です。同じ名前のすべてのファイルをCHANGELOG_*.TXTマージし、別の新しい行を1つのファイルに追加する必要がありますCHANGELOG_20160926-20160930.TXT。同様に、同じ名前のすべてのファイルをFILE_CHANGELOG_*.TXTマージし、別の新しい行を1つのファイルに追加する必要がありますFILE_CHANGELOG_20160926-20160930.TXT

どうすればいいですか?

ベストアンサー1

言語要件を指定していないので、Python 3を使用できます。

#/usr/bin/env python3

from glob import glob
from os.path import basename
import re

for prefix in ('CHANGELOG', 'FILE_CHANGELOG'):
    files = dict((int(re.split('[_.]', basename(f))[-2]), f)
                 for f in glob('*-*-*/%s_*.TXT' % prefix))
    out_file = '%s_%d-%d.TXT' % (prefix, min(files.keys()), max(files.keys()))

    with open(out_file, 'w') as f_out:
        for date in sorted(files.keys()):
            with open(files[date]) as f_in:
                for line in f_in:
                    f_out.write(line)
            f_out.write("\n")

globデフォルトでは、basenameファイル名を一覧表示および解析し、日付でソートするために使用されます。最小/最大値は、すべてのファイルが順次書き込まれる出力ファイル名を作成するために使用されます。必要に応じて、実際のディレクトリ構造に合わせてスキーマを調整することを忘れないでください。次に、chmod次を実行します。

$ chmod +x script.py
$ ./script.py

おすすめ記事