2016-10-31 24 views
-2

私は非常にスクリプトに新しく、その結果、一連のファイルをマージする方法がよく分かりません。夜間の負荷がDBに正しくアップロードされていることを確認する品質管理スクリプトを作成しようとしています(何らかの理由で遅れがある場合、その遅れの間に寄せられた寄付は除外されます)。日付範囲に基づいてファイルを結合する

私はそのようにラベル付け、毎日同期ファイルのディレクトリを持っている:

20161031_donations.txt 

20161030_donations.txt 

20161029_donations.txt 

20161028_donations.txt 

etc etc 

すべてのファイルが同じヘッダを持っています。

最後の7日間のファイルを1つのヘッダー行だけで1つのファイルにマージしたいとします。私はほとんどの日付範囲をワイルドカードする方法を理解することに苦労しています。私はこれまでに行ったことがあります:

これは静的マージでは有効ですが、動的ではなく、適切なQCスクリプトに統合できます。

私はUNIXのバックグラウンドを持っていますが、これをPythonで行いたいと思います。私はPythonには新しいので、任意の提案に説明してください。

+0

を行うことのためにそれをスキップすることができます。あなたが何かを書いて何らかの困難を抱えているなら、あなたがしたことを示し、特定の質問をしてください。 ヒントについては、http://stackoverflow.com/help/how-to-askを参照してください。自由な作業をしたいだけなら、StackOverflowはそのような要求の場所ではありません。 あなた自身でコードを書く方法や、あなたのために書く方法を学んでください。 – ghoti

答えて

1

アレックス・ホールの答えを拡張し、あなたはstackoverflowの無料コードの書き込みサービスではありません一つのファイルからヘッダを取得し、残りのファイルがマージに

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 
+0

関数を何かに代入して使用したことがあります 'myfile = open( 'file.txt')これは、 、 'wb') myfile.write([some SQL output]) ' この方法でopenを使用してファイルにデータを書き込むので、後でスクリプトで使用できますか? – JayA

+0

' with'文を意味しますか? 'をoutfp:' open( "merged_file.txt"、 "w")として使用するとファイルを開き、ファイルオブジェクトを 'outfp'に割り当てます。これは、節を抜けたときにファイルを自動的に閉じるので便利です。 'myfile = open( 'file.txt'、 'wb')' ...しかし、最終的に 'myfileはしません。close() 'データはそのファイルにフラッシュされません。このスクリプトはファイルに書き込みますが、完了するとディスクに保存されます。 – tdelaney

1

日付フォーマットの利点(0詰めの場合、たとえば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

+0

私は実際にファイルをマージする方法はまだ分かりません。これはsed(ヘッダー行を削除する)またはcatと組み合わせてファイルを結合する方法は? – JayA

+0

私は個人的に言語を混ぜるのが好きではありません。あなたは静的なマージをすることができたと言いましたので、試してみてください。 –

+0

確かに。だから私は通常、 'head -1 file1.txt> headers.tmp sed -i '1d' * .txt cat headers.tmp * .txt> FINAL.txt'または' head -1 file1.txt>のようなことをします。 .tmpファイル1のファイル2のファイル3を行うsed -i '1d' $ {FILE} .txt >> headers.tmp done'それは何か...それは1)日付質問に答えていない2)isn '動的です。私は手動でファイルを指示するのではなく、最後の7日間を表示しようとしています – JayA

関連する問題