用Python重命名和移动文件

32 人关注

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

当它循环浏览每个文件名时。

'oldname' = the current file name
'newname' = what it needs to be renamed to

我想重命名文件并将其移到一个新的文件夹".../renamedfiles"。

我可以在循环过程中同时进行重命名和移动吗?

4 个评论
向我们展示你的循环代码--你为解决这个问题所做的尝试。
重命名和移动一个文件是同一件事。
@inspectorG4dget 或者,只需使用 shutil.move ,因为它可以做正确的事情。
python
file-rename
Zipper1365
Zipper1365
发布于 2017-03-02
5 个回答
Danny
Danny
发布于 2022-01-19
已采纳
0 人赞同

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

假设在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')
    
ShadowRanger
ShadowRanger
发布于 2022-01-19
0 人赞同

如果源和目标位置在不同的分区/驱动器/设备上, os.rename (和 os.replace )将无法工作。如果是这种情况,你需要 use shutil.move 如果可能的话,它将使用原子重命名,如果目的地不在同一个文件系统上,则退回到复制-删除。它很乐意在同一操作中既移动又重命名;无论如何操作都是一样的。

As per the docs, shutil.move only copies if the src & dest are on different file systems.
@norman_h:嗯...这是对我的回答的转述?在可能的情况下,它是原子重命名,当它们不在同一个文件系统上时,就会退回到复制-删除。
Ofer Arial
Ofer Arial
发布于 2022-01-19
0 人赞同

要进行这两项操作,你可以使用 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))

替换代码2】功能允许你同时改变文件和它的文件夹的名称。

为了防止在重命名和移动文件时出现任何错误,使用shutil.move.

Mathieu Bour
Mathieu Bour
发布于 2022-01-19
0 人赞同

在你想要的目录下创建一个Python文件,并写上类似的内容。

import os
for filename in os.listdir("."):
    if(filename ...):
        newFilename = ...
        os.rename(filename, newFilename)
    
Tomerikoo
Tomerikoo
发布于 2022-01-19
0 人赞同

从Python 3.4开始,使用路径的工作可以通过以下方式轻松完成 pathlib .移动/重命名一个文件是通过 rename or replace (将无条件地进行替换)。因此,结合 parent 属性和 连接运算符 ,你可以做。

from pathlib import Path