2016-12-16 4 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' 

, который желаемого файла.

Таким образом, вопрос заключается в следующем:

Можно ли выполнить эту замену без необходимости, чтобы сделать эту imageDict, содержащую 42000 уникальных ключей на основе старого файла (как я бы 42000 имен файлов необходимости пройти это имя файла преобразование)?

Есть ли лучший способ выполнить эту задачу в целом? Неужели я неправильно делаю эту проблему неправильно или неэффективно?

Благодаря

+0

Если imageDict не изменится, я хотел бы сохранить его из функции или в закрытии. Если вам нужно его отредактировать, то, вероятно, для него новый класс. – DaveQ

+0

Есть ли какой-либо шаблон или правило для заменяющих имен? Или где-нибудь вы можете вытащить информацию о замене? Там должно быть что-то. – user2357112

+0

@DaveQ Если бы я должен был сделать этот класс, как мне это сделать? Я не вижу связи с чтением документации по классам – Johnny

ответ

1

После построения отображения, сохранить его в сферу, где он не перестроен для каждого запроса.

Кроме того, ваш метод не делает ничего больше, чем поиск в словаре, так что я бы упростить вдоль линий:

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

Смежные вопросы