如何在 Python 中移动文件?
- 2024-11-27 10:43:00
- admin 原创
- 14
问题描述:
我怎样才能在 Python 中做到等效的事情mv
?
mv "path/to/current/file.foo" "path/to/new/destination/for/file.foo"
解决方案 1:
os.rename()
,os.replace()
, 或者shutil.move()
全部采用相同的语法:
import os
import shutil
os.rename("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")
shutil.move("path/to/current/file.foo", "path/to/new/destination/for/file.foo")
文件名 (
"file.foo"
) 必须包含在源参数和目标参数中。如果两者不同,则文件将被重命名并移动。创建新文件的目录必须已经存在。
在 Windows 上,具有该名称的文件一定不能存在,否则会引发异常,但
os.replace()
即使出现这种情况也会默默地替换文件。shutil.move
大多数情况下,它只是简单地调用os.rename
。但是,如果目标与源位于不同的磁盘上,它将复制然后删除源文件。
解决方案 2:
尽管os.rename()
和shutil.move()
都可以重命名文件,但最接近 Unix mv 命令的命令是shutil.move()
。 不同之处在于,os.rename()
如果源和目标位于不同的磁盘上, 则不起作用,而 则shutil.move()
文件与磁盘无关。
解决方案 3:
在Python 3.4之后,也可以使用pathlib
的类Path
来移动文件。
from pathlib import Path
Path("path/to/current/file.foo").rename("path/to/new/destination/for/file.foo")
https://docs.python.org/3.4/library/pathlib.html#pathlib.Path.rename
解决方案 4:
对于或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
看到文件夹名称确实发生了变化。这里shutil
将目标移回源。
>>> import shutil
>>> source = '/opt/awesome/destination'
>>> destination = '/opt/awesome/source'
>>> shutil.move(source, destination)
>>> os.listdir('/opt/awesome/source')
['awesome.txt']
这次我检查了源文件夹,以确保awesome.txt
我创建的文件存在。它在那里
现在,我们已将文件夹及其文件从源移动到目标,然后再移回。
解决方案 5:
这是我目前正在使用的:
import os, shutil
path = "/volume1/Users/Transfer/"
moveto = "/volume1/Users/Drive_Transfer/"
files = os.listdir(path)
files.sort()
for f in files:
src = path+f
dst = moveto+f
shutil.move(src,dst)
您还可以将其转换为一个函数,该函数接受源目录和目标目录,如果目标文件夹不存在,则创建目标文件夹,然后移动文件。还允许过滤源文件,例如,如果您只想移动图像,则使用模式'*.jpg'
,默认情况下,它会移动目录中的所有内容
import os, shutil, pathlib, fnmatch
def move_dir(src: str, dst: str, pattern: str = '*'):
if not os.path.isdir(dst):
pathlib.Path(dst).mkdir(parents=True, exist_ok=True)
for f in fnmatch.filter(os.listdir(src), pattern):
shutil.move(os.path.join(src, f), os.path.join(dst, f))
解决方案 6:
接受的答案是不正确的,因为问题不是将一个文件重命名为一个文件,而是将许多文件移动到一个目录中。shutil.move
会完成工作,但对于这个目的os.rename
是无用的(如评论中所述),因为目标必须有一个明确的文件名。
解决方案 7:
由于您不关心返回值,因此您可以这样做
import os
os.system("mv src/* dest/")
解决方案 8:
使用subprocess.run()
方法也可以。
python:
>>> import subprocess
>>> new = "/path/to/destination"
>>> old = "/path/to/new/destination"
>>> process = "mv ..{} ..{}".format(old,new)
>>> subprocess.run(process, shell=True) # do not remember, assign shell value to True.
在 Linux 上工作时,此方法可行。Windows 可能会出错,因为没有 mv 命令。
解决方案 9:
这是解决方案,但无法shell
使用mv
。
from subprocess import Popen, PIPE, STDOUT
source = "path/to/current/file.foo",
destination = "path/to/new/destination/for/file.foo"
p = Popen(["mv", "-v", source, destination], stdout=PIPE, stderr=STDOUT)
output, _ = p.communicate()
output = output.strip().decode("utf-8")
if p.returncode:
print(f"E: {output}")
else:
print(output)
解决方案 10:
根据此处描述的答案,使用subprocess
是另一种选择。
像这样:
subprocess.call("mv %s %s" % (source_files, destination_folder), shell=True)
我很好奇,想知道与 相比,这种方法的优缺点shutil
。由于我的情况是,我已经subprocess
出于其他原因使用了这种方法,而且它似乎有效,所以我倾向于坚持使用它。
这取决于您运行脚本的 shell。该mv
命令适用于大多数 Linux shell(bash、sh 等),但也可以在 Windows 上的 Git Bash 等终端中使用。对于其他终端,您必须更改mv
为备用命令。
解决方案 11:
import os,shutil
current_path = "" ## source path
new_path = "" ## destination path
os.chdir(current_path)
for files in os.listdir():
os.rename(files, new_path+'{}'.format(f))
shutil.move(files, new_path+'{}'.format(f)) ## to move files from
不同的磁盘,例如 C: --> D:
解决方案 12:
使用 django 中的内置包进行文件操作
导入这个包
import shutil
使用以下代码将文件从一个目录移动到另一个目录
file = Path(output_file)
converted_file = 'media/streamdataconverted/'+file.name
shutil.move(file, converted_file)
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件