首先,我是Python和编程的新手。我希望重命名的文件位于此格式,其中 SampleID 是唯一ID:
/ home / MattXD / Documents / Processed / Untitled Folder / SampleID /subfolder/report.pdf
我想将所有report.pdf文件重命名为SampleID.pdf
import os, sys, shutil
topdir = '/home/MattXD/Documents/Processed/Untitled Folder/'
exten = 'report.pdf'
for dirpath, dirnames, files in os.walk(topdir):
for name in files:
if name.lower().endswith(exten):
oldfile = os.path.join(dirpath, name)
newname = oldfile.split('/')[6]
print name
print newname
shutil.copy2(oldfile, '/home/MattXD/Documents/Processed/Untitled Folder/%s' % newname)
我觉得我已经接近正确的轨道,因为我可以从print name
和print newname
看到我在oldfile
中存储了正确的文件和新名称我想在newname
中使用。我似乎无法重命名该文件!
我认为我滥用shutil.copy2并且我的for循环可能存在问题,因为我收到错误,文件名(report.pdf和report.pdf)是相同的(它们是)。谢谢你的阅读。
答案 0 :(得分:2)
嗯,实际上有os.rename
函数:
os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
将文件或目录src重命名为dst。如果dst是目录,则会引发OSError。在Unix上,如果dst存在且是一个文件,如果用户有权限,它将被静默替换。如果src和dst在不同的文件系统上,则某些Unix风格的操作可能会失败。如果成功,重命名将是原子操作(这是POSIX要求)。在Windows上,如果dst已经存在,即使它是文件,也会引发OSError。
此函数可以支持指定src_dir_fd和/或dst_dir_fd来提供相对于目录描述符的路径。
如果您想要跨平台覆盖目的地,请使用replace()。
可用性:Unix,Windows。
如果您坚持使用shutil
,shutil.move
是您的选择。