0

我的python脚本下载了.pdf文件,但它们有动态生成的名称,所以我重命名并将它们移动到与我一起使用的文件夹中。但从我所了解的python不支持相当于通配符 所以这就是为什么我猜这个代码不起作用。如何使用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实现等效的通配符。你可以让你下载的文件列表,像这样

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,这一种反证将导致下python3 +一个can only concatenate list (not "range") to list错误。

,最后用两个列表,在平行考虑循环,重命名每个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)) TypeError:只能连接列表(不是“范围”)到列表 – Gdfelt

+0

@Gdfelt。好吧,这是可能的python27,但不与python3显然。该错误是由于行'[''] +范围(len(dfiles))''。我学到了一些新东西。查看我的更新。 Juste用'[''] + list(范围(len(dfiles))'' – Kanak

+0

代替行。 非常感谢。 – Gdfelt

相关问题