如何在Python中移动文件

2024-04-18 03:54:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我查看了Python^{}接口,但找不到移动文件的方法。我如何在Python中做与$ mv ...等价的事情?

>>> source_files = '/PATH/TO/FOLDER/*'
>>> destination_folder = 'PATH/TO/FOLDER'
>>> # equivalent of $ mv source_files destination_folder

Tags: 文件oftopath方法sourcefilesfolder
3条回答

^{}^{}^{}

它们都使用相同的语法:

import os
import shutil

os.rename("path/to/current/file.foo", "path/to/new/destination/for/file.foo")
shutil.move("path/to/current/file.foo", "path/to/new/destination/for/file.foo")
os.replace("path/to/current/file.foo", "path/to/new/destination/for/file.foo")

注意,在源参数和目标参数中都必须包含文件名(file.foo)。如果它被更改,文件将被重命名和移动。 还要注意,在前两种情况下,创建新文件的目录必须已经存在。在Windows上,具有该名称的文件不能存在,否则将引发异常,但即使出现这种情况,os.replace()也将自动替换文件。

正如在对其他答案的评论中所指出的,在大多数情况下,shutil.move只是调用os.rename。但是,如果目标位于与源不同的磁盘上,则它将复制并删除源文件。

对于os.rename或shutil.move,需要导入模块。 不需要*字符来移动所有文件。

我们在/opt/awesome有一个名为source的文件夹,其中一个文件名为awesome.txt。

in /opt/awesome
○ → ls
source
○ → ls source
awesome.txt

python 
>>> source = '/opt/awesome/source'
>>> destination = '/opt/awesome/destination'
>>> import os
>>> os.rename(source, destination)
>>> os.listdir('/opt/awesome')
['destination']

我们使用os.listdir来查看文件夹名实际上已更改。 这是将目标移回源的shuil。

>>> import shutil
>>> shutil.move(destination, source)
>>> os.listdir('/opt/awesome/source')
['awesome.txt']

这次我检查了源文件夹,以确保我创建的awesome.txt文件存在。就在那里:)

现在,我们已经将文件夹及其文件从源移到目标,然后再移回来。

尽管os.rename()shutil.move()都将重命名文件,但最接近Unix mv命令的命令是shutil.move()。不同之处在于,如果源和目标位于不同的磁盘上,os.rename()将不起作用,而shutil.move()不关心文件位于哪个磁盘上。

相关问题 更多 >