如何使用os.rename移动不确定名称的文件?

How to use os.rename to move a file with an uncertain name?

我的 python 脚本下载 .pdf 文件,但它们具有动态生成的名称,因此我重命名并将它们移动到我使用它们的文件夹中。 但据我了解 python 不支持相当于通配符 所以这就是我猜这段代码不起作用的原因。

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'

那么我该如何完成这个任务呢?

模块 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)))
         )

注意如果你在python<3以下就不需要把range变成list了,相反会导致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的文件夹确实存在。如果没有,您将需要创建它们。