2016-12-16 1 views
0

私は古いファイル名(あるホストのグラフィックライブラリに既にアップロードされている)を、別のホストのメディアライブラリに既に存在するものに置き換えようとしています。巨大なルックアップテーブルに基づいて置換を行うより良い方法はありますか?

私はそうのように書かれたPythonスクリプトを持っている:

def imageFilesSub(oldFileName): 
    imageDict = { 
     'Switzer_Falls_16_140L.jpg': 'Switzer_Falls_140_04232016.jpg', 
     ... 
     'Switzer_Falls_16_049L.jpg': 'Switzer_Falls_049_04232016.jpg', 
     'Switzer_Falls_09_048L.jpg': 'Switzer_Falls_048_03072009.jpg', 
     ... 
     'Switzer_Falls_09_013L.jpg': 'Switzer_Falls_013_03072009.jpg', 
     'Pasadena_001L.jpg': 'Pasadena_001_04232016.jpg', 
     'Switzer_Falls_03_015L.jpg': 'Switzer_Falls_015_02022003.jpg', 
     'Tunnel_View_03_010L.jpg': 'Tunnel_View_010_05102003.jpg', 
     ... 
     } 
    newFileName = imageDict[oldFileName] 
    return newFileName 

blah = imageFilesSub('Switzer_Falls_16_049L.jpg') 
print(blah) 

どう印刷されることは次のとおりです。

'Switzer_Falls_049_04232016.jpg' 

希望のファイル名です。

だから質問はこれです:

それは私が42,000のファイル名は、このファイル名の変換を受ける必要があるだろうと(古いファイル名に基づいて42,000ユニークキーを含むこのimageDictを加えることなく、この置換を行うことが可能です)?

このタスクを実行する一般的な方法はありますか?私はこの問題について間違っているのか非効率的に行くのですか?

おかげ

+0

、私は外にそれを維持するようになりますファンクション、またはクロージャーで実行されます。それを編集する必要がある場合は、おそらくそれのための新しいクラス。 – DaveQ

+0

置換名にはパターンや規則がありますか?あるいはどこかで代替情報を引き出すことができますか?何かがあるはずです。 – user2357112

+0

@DaveQもし私がこれをクラスにしていたら、どうやってそれをやりますか?私は、クラスについてのドキュメントを読むことからの接続を見ていません – Johnny

答えて

1

マッピングを構築した後、それはすべての検索に再構築されていないスコープに保管してください。

はまた、あなたの方法は、辞書検索よりも何もしていないので、私はの線に沿って簡素化したい:imageDictは変更されません場合は

filename_mapping = { 
    'Switzer_Falls_16_140L.jpg': 'Switzer_Falls_140_04232016.jpg', 
    ... 
} 

for filename in filenames: 
    try: 
     do_something(filename_mapping[filename]) 
    except KeyError: 
     # handle scenario where there is no mapping 
     pass 
+0

私はファイルマッピングの人口を強制的に強制する必要はないと思っていましたが、より圧縮されたこれを行う効率的な方法です。 KeyErrorの旗をありがとう – Johnny

関連する問題