如何使用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
的文件夹确实存在。如果没有,您将需要创建它们。
我的 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
的文件夹确实存在。如果没有,您将需要创建它们。