使用Python重命名和移动文件

33

我有一个Python脚本,它会将文件夹中的现有文件名与参考表进行比较,然后确定是否需要重新命名。

当它遍历每个文件名时:

'oldname' = the current file name

'newname' = what it needs to be renamed to

我想将文件重命名并移动到一个名为“..\renamedfiles”的新文件夹中。

在循环迭代过程中是否可以同时完成重命名和移动操作?


1
展示你的循环代码 - 以及你尝试解决它的方法。 - Ofer Arial
1
重命名和移动文件是同一件事。 - jwodder
1
使用 os.renameshutil.move - inspectorG4dget
1
@inspectorG4dget 或者,只需使用 shutil.move,因为它会执行正确的操作。 - Antti Haapala -- Слава Україні
5个回答

48

是的,你可以做到这一点。在Python中,你可以使用shutil库中的move函数来实现。

比如说,在Linux系统上,你有一个位于/home/user/Downloads文件夹下名为“test.txt”的文件,你想要将它移动到/home/user/Documents并且改名为“useful_name.txt”。你可以在同一行代码中完成这两个任务:

import shutil

shutil.move('/home/user/Downloads/test.txt', '/home/user/Documents/useful_name.txt')

在您的情况下,您可以这样做:

import shutil

shutil.move('oldname', 'renamedfiles/newname')

26
如果源路径和目标路径位于不同的分区/驱动器/设备上,os.rename(和os.replace)将无法工作。如果是这种情况,您需要使用shutil.move,它会尝试原子重命名(如果可能),如果目标位置不在同一文件系统上,则会回退到拷贝-删除操作。它完全可以在同一操作中同时移动和重命名;操作是相同的。

根据文档,shutil.move 只有在源和目标位于不同的文件系统时才会复制。 - norman_h
3
嗯...那不是对我的答案进行了释义吗?它会在可能的情况下进行原子重命名,并在它们不在同一文件系统上时回退到复制-删除。 - ShadowRanger

3
自从Python 3.4版本以后,使用pathlib可以轻松地操作路径。移动/重命名文件可使用renamereplace方法(将无条件执行替换)。因此,结合parent属性和连接运算符,您可以实现如下操作:
from pathlib import Path

source = Path("path/to/file/oldname")

target = source.replace(source.parent / "renames" / "newname")

3

您可以使用os.rename(src, dest)函数来执行这两个操作。

您应该有一个想要保存文件的目录以及新文件名。您可以在循环中遍历每个文件并执行此操作。

例如:

# In Windows
dest_dir = "tmp\\2"
new_name = "bar.txt"
current_file_name = "tmp\\1\\foo.txt"
os.rename(current_file_name, os.path.join(dest_dir, new_name))
rename函数允许您同时更改文件和文件夹的名称。
为了避免在重命名和移动文件时出现任何错误,请使用shutil.move

1
在您希望的目录中创建一个Python文件,并编写类似于以下内容的代码:
import os

for filename in os.listdir("."):
    if(filename ...):
        newFilename = ...
        os.rename(filename, newFilename)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接