2017-06-10 1 views
0

ファイル名内部顧客の固有の名前の最新の.tarファイルのリターン一覧、としてラベル: - どのように私を行うPythonの - 私は、フォルダ「supertar」における様々なtarファイルを持っている

esarchive--Mona-AB-Test226-8037affd-06d1-4c61-a91f-816ec9cb825f-05222017-4.tar, esarchive--Jackson-HQ-112-ecb5ab6a-c199-402d-9a8a-8c54c8901d66-06092017-4.tar, esarchive--Mona-AB-Test226-8037affd-06d1-4c61-a91f-816ec9cb825f-05202017-4.tar, esarchive--Jackson-HQ-112-ecb5ab6a-c199-402d-9a8a-8c54c8901d66-06012017-4.tar, esarchive--Jonah-7fbbbc6c-8463-4ec1-9bde-3fc5429311e5-06092017-4

Mona、Jackson、Jonahなどの各顧客の最新の.tarファイル名をそれぞれのファイル名の日付値(ファイル名の末尾)に記載します。

esarchive--Mona-AB-Test226-8037affd-06d1-4c61-a91f-816ec9cb825f-05222017-4.tar, esarchive--Jackson-HQ-112-ecb5ab6a-c199-402d-9a8a-8c54c8901d66-06092017-4.tar, esarchive--Jonah-7fbbbc6c-8463-4ec1-9bde-3fc5429311e5-06092017-4

私がこれまでに以下のコードを実行している: -

import sys 
import os 
import tarfile,sys 
import tarfile 
import re 

names = os.listdir('/home/neel/Desktop/supertar') 
def parse_date(name, offset=-10): 
    try: 
     date_str = name[offset:offset+8] 
     return int(date_str[-4:] + date_str[:2] + date_str[2:4]) 
    except (IndexError, TypeError, ValueError): # invalid file name 
     return -1 
sorted_list = [x[1] for x in sorted(((parse_date(l, -14), l) for l in names), reverse=True) if x[0] != -1] 

print "The File Being Untarred is:", sorted_list[0] 

tar = tarfile.open("/home/neel/Desktop/supertar/"+sorted_list[0]) 
tar.extractall(path="/home/neel/Documents/tar-dump-es") # untar file here 
tar.close() 
a=re.match("esarchive--(\w+)-(\w+)-(\w+)", sorted_list[0]).group(1) 
b=re.match("esarchive--(\w+)-(\w+)-(\w+)", sorted_list[0]).group(2) 
c=re.match("esarchive--(\w+)-(\w+)-(\w+)", sorted_list[0]).group(3) 
s = a+'-'+b+'-'+C# s=Mona-AB-Test226,Jackson-HQ-112 etc. 
print 'Logging Latest Customer Log For:',s 

最新の日付を持つ一人の顧客のためにのみ最新の.tar sorted_list変数にこのコードが戻ります。 Mona-AB-Test226などのような多くの顧客名を持っていますので、どのようにすればこのディレクトリを一意の顧客名(最新のもの)ごとに最新の.tarファイルにして、上記のコードの形式で私のダンプのフォルダに。

答えて

2

まず、ファイル名に日付を見つけます。

file_date_str = my_file_name.split('-')[-2] 

次に、比較目的でdatetimeオブジェクトを取得します。

import datetime 
datetime_obj = datetime.datetime.strptime(file_date_str, '%m%d%Y') 

1つのファイルの最新のファイル名を比較して保存します。

name = file_name.split('-')[0].split('--')[1]. # Get Mona, Jackson, ... 
try: 
    (latest_date, _) = my_dict['name']. # _ has file name, which you don't want to compare. 
    if date > latest_date: 
     # If entry for this name exists, 
     # Replace the info with latest date. 
     my_dict['name'] = (date, file_name) 
except KeyError: 
    # No info for this name in dictionary. 
    my_dict['name'] = (date, file_name) 

すべてのファイルに対して、このコードをすべてループで実行します。最後に、あなたが辞書に入れるものを持っていますmy_dict。また、必要になる可能性のある初期化とマイナーなデバッグを忘れないでください。

関連する問題