0

Мой скрипт python загружает файлы .pdf, но у них есть динамически сгенерированные имена, поэтому я переименовываю их и перемещаю их в папки, с которыми я ими работаю. Но из того, что я понимаю, python не поддерживает эквивалент wild-card , поэтому я думаю, что этот код не работает.Как использовать os.rename для перемещения файла с неопределенным именем?

os.rename('downloads/*.pdf','outputs/' + jpm + '/' + jpm + '-oa.pdf') 

Я также использовал shutil.move и он дал мне подобную ошибку в одном я покажу вам, но он жаловался только об исходном каталоге os.rename пожаловалась всей линии.

FileNotFoundError: [Errno 2] No such file or directory: 'downloads/*.pdf' -> 'outputs/JPM0522733/JPM0522733-oa.pdf' 

Как я могу выполнить эту задачу?

ответ

0

Модуль glob реализует эквивалент wild-card. Вы можете составить список ваших загружаемых файлов, например, так

import glob 
dfiles = glob.glob1('downloads','*.pdf') 

так, чтобы убедиться, что вы переименовывать загруженные файлы по-разному, то вы можете создать список, длина которого равна len(dfiles) так, чтобы связать новый имя для каждого из них.

jpm = 'JPM0522733' 
nfiles = map(lambda i: '{0}-{1}oa.pdf'.format(jpm,i), 
      ['']+list(range(len(dfiles))) 
     ) 

Обратите внимание, что нет никакой необходимости, чтобы включить диапазон в список, если вы находитесь под питоном < 3, который противный вызовет ошибку can only concatenate list (not "range") to list под Python3 +.

и, наконец, цикл по двум спискам, рассматриваемых параллельно, чтобы переименовать каждый файл в формате PDF

for dfile,nfile in zip(dfiles,nfiles): 
    os.rename( 
     os.path.join('downloads', dfile), 
     os.path.join('outputs', jpm, nfile) 
    ) 

Предполагая, что папки, имена которых "downloads", "outputs" и jpm существуют. Если нет, вам нужно будет их создать.

+0

Благодарим вас за ответ. Я в настоящее время имею эту ошибку. [''] + range (len (dfiles)) ТипError: может только объединить список (не «диапазон») в список – Gdfelt

+0

@Gdfelt. Хорошо, это возможно с python27, но не с python3. Ошибка связана с линией '[''] + range (len (dfiles))'. Я узнал что-то новое. См. Мое обновление. Juste заменить строку на '[''] + список (диапазон (len (dfiles)))' – Kanak

+0

Работал как очарование! спасибо. – Gdfelt

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