Python中移动文件的方法

Python中移动文件的方法

技术背景

在Python编程中,经常会遇到需要移动文件的场景,比如文件整理、备份等。Python提供了多种方法来实现文件的移动操作。

实现步骤

使用os.rename()os.replace()shutil.move()

这三种方法的语法类似,示例如下:

1
2
3
4
5
6
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")

使用时需要注意:

  1. 源路径和目标路径都要包含文件名,如果文件名不同,文件在移动的同时会被重命名。
  2. 目标文件所在的目录必须已经存在。
  3. 在Windows系统中,目标文件名不能已存在,否则会抛出异常,但os.replace()会静默替换已存在的文件。
  4. shutil.move在大多数情况下会调用os.rename,但如果源文件和目标文件在不同磁盘,它会先复制再删除源文件。

使用pathlib模块

从Python 3.4开始,也可以使用pathlibPath类来移动文件:

1
2
3
from pathlib import Path

Path("path/to/current/file.foo").rename("path/to/new/destination/for/file.foo")

移动文件夹

1
2
3
4
source = '/opt/awesome/source'
destination = '/opt/awesome/destination'
import os
os.rename(source, destination)

编写移动目录的函数

1
2
3
4
5
6
7
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))

使用系统命令

在Linux系统中,可以使用os.systemsubprocess模块调用mv命令:

1
2
3
4
5
6
7
8
import os
os.system("mv src/* dest/")

import subprocess
new = "/path/to/destination"
old = "/path/to/new/destination"
process = "mv ..{} ..{}".format(old,new)
subprocess.run(process, shell=True)

核心代码

使用shutil.move移动文件

1
2
3
4
5
import shutil

src = 'path/to/source/file.txt'
dst = 'path/to/destination/file.txt'
shutil.move(src, dst)

使用pathlib移动文件

1
2
3
4
5
from pathlib import Path

src = Path('path/to/source/file.txt')
dst = Path('path/to/destination/file.txt')
src.rename(dst)

最佳实践

  • 如果在跨磁盘移动文件或需要处理文件夹,推荐使用shutil.move
  • 如果只是简单的文件重命名和移动,并且源文件和目标文件在同一磁盘,可以使用os.rename
  • 如果使用Python 3.4及以上版本,pathlib提供了更面向对象的方式来处理文件路径。

常见问题

  • 目标目录不存在:在移动文件前,确保目标目录已经存在,可以使用os.makedirspathlib.Path.mkdir创建目录。
  • Windows系统中文件已存在:使用os.replace可以避免这个问题,但会覆盖已存在的文件。
  • 系统命令兼容性问题os.systemsubprocess调用的系统命令在不同操作系统上可能不同,例如Windows没有mv命令。

Python中移动文件的方法
https://119291.xyz/posts/python-file-moving-methods/
作者
ww
发布于
2025年6月6日
许可协议