2

という名前のファイルがいくつかありますyyyymmdd-hhmmss.csv.gz。今、私は毎日午前 2 時から最初のファイルを開き、いくつかのプロセスを 1 つずつ実行したいと考えています。

私のファイルは次のとおりです。

...
20120706-015923.txt
20120706-015934.txt 
20120706-020008.txt
20120706-020030.txt
...
20120707-015934.txt
20120707-020005.txt
20120707-020015.txt
...

そのため、最初にこのフォルダー内のファイル名を調べ20120706-020008.txtて、その日の午前 2 時からの最初のファイルを見つけ、すべての行を読み取って何らかの処理を行うスクリプトを用意しました。私の問題は、これらのファイルを見つけるようにこのスクリプトに指示する方法ですか? 20120706-020008.txt20120707-020015.txt20120708-02....

4

3 に答える 3

3

for loopとの簡単な使用法dictionary

import glob
import datetime

dic={}

for f in glob.glob('*-*.txt'):
    d = datetime.datetime.strptime(f, '%Y%m%d-%H%M%S.txt')
    if d.hour < 2:
        continue
    if not d.day in dic or dic[d.day][0] > d.time:
        dic[d.day] = (d.time, f)

for t, f in dic.values():
    print f

次のファイルがあるとします。

20120706-015923.txt
20120706-015934.txt 
20120706-020008.txt
20120706-020030.txt
20120707-015934.txt
20120707-020005.txt
20120707-020015.txt

出力は次のようになります。

20120706-020008.txt
20120707-020005.txt
于 2012-07-10T12:07:15.203 に答える
3

モジュールを使用しglobて、ファイルを反復処理できます。

import glob
for f in glob.glob('20120707-*'):
    # do something with f

上記のコードは、ファイル名が で始まるすべてのファイルを反復処理することを意味します20120707-*記号は、ファイル名の残りの部分と一致します。

datetimeモジュールを使用して、Python コードでファイルのプレフィックスを計算できます (に使用できる値については、ドキュメントstrftimeを参照してください)。

import datetime
today = datetime.date.today()
print today.strftime("%Y%m%d")

結合されたコードは次のようになります。

import datetime    
import glob

today = datetime.date.today()
pattern = "{0}-*".format(today.strftime("%Y%m%d"))
for f in glob.glob(pattern):
    # do something with f

検索パターンにファイルを含めることで、ファイルglobのみを検索するように強制することもできます。.txt

pattern = "{0}-*.txt".format(today.strftime("%Y%m%d"))
于 2012-07-10T11:52:28.023 に答える
0

ファイルを時系列で午前 2 時から午前 2 時までの時間にグループ化し、並べ替えて最初のファイルを取得します。

import itertools as it
import glob
import datetime

def map_to_day_2am(fn):
    # parses filename, substracts two hours and returns the date
    return (datetime.strptime(fn, '%Y%m%d-%H%M%S.txt') -
            datetime.timedelta(hours=2)).date()

for day, daily_fns_iter in it.groupby(sorted(glob.glob('*.txt')),
                                      key=map_to_day_2am):
    print min(daily_fns_iter)
于 2012-07-10T12:20:07.973 に答える