在Python中将文件批量重命名为其目录结构的一部分

时间:2015-05-22 15:36:32

标签: python batch-file shutil

首先,我是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 nameprint newname看到我在oldfile中存储了正确的文件和新名称我想在newname中使用。我似乎无法重命名该文件!

我认为我滥用shutil.copy2并且我的for循环可能存在问题,因为我收到错误,文件名(report.pdf和report.pdf)是相同的(它们是)。谢谢你的阅读。

1 个答案:

答案 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。

如果您坚持使用shutilshutil.move是您的选择。