Python中能否用相对路径替代绝对路径实现文件复制?如何操作?
当然可以用相对路径实现这个复制操作!不过得先搞清楚一个核心点——相对路径的解析完全依赖于脚本运行时的「当前工作目录」,所以第一步得先明确你的脚本是从哪个目录启动的。
1. 先确认当前工作目录
运行下面的代码就能知道当前脚本的工作目录:
import os print(os.getcwd())
比如如果输出是C:\users\admin,那你的源路径相对这个目录就是./Downloads/Application1,目标路径就是./Documents/Packages;如果脚本是从C:\users\admin\Downloads启动的,那源路径就是./Application1,目标路径就是../Documents/Packages。
2. 用相对路径实现复制的具体代码
我们常用shutil模块来处理文件/文件夹的复制,结合os模块来处理路径:
示例1:基于当前工作目录直接使用相对路径
import os import shutil # 定义相对路径(根据你的工作目录调整) source_rel = "./Downloads/Application1" # 对应绝对路径C:\users\admin\Downloads\Application1 dest_rel = "./Documents/Packages" # 对应绝对路径C:\users\admin\Documents\Packages # 可选但推荐:把相对路径转为绝对路径,避免工作目录变化导致的问题 source_abs = os.path.abspath(source_rel) dest_abs = os.path.abspath(dest_rel) # 复制整个文件夹(如果目标已存在,加上dirs_exist_ok=True避免报错) shutil.copytree(source_abs, dest_abs, dirs_exist_ok=True) # 如果是复制单个文件,用下面的代码: # shutil.copy2(source_abs, dest_abs)
示例2:手动切换到基准目录再用相对路径
如果你不想依赖当前工作目录,可以先切换到C:\users\admin,这样相对路径就固定了:
import os import shutil # 切换到基准目录 base_dir = "C:\\users\\admin" os.chdir(base_dir) # 现在相对路径就基于这个基准目录了 source_rel = "./Downloads/Application1" dest_rel = "./Documents/Packages" shutil.copytree(source_rel, dest_rel, dirs_exist_ok=True)
几个关键注意事项
- 路径分隔符:Windows里用
\或者/都可以,Python会自动处理,但用\的时候要记得转义(写成\\)或者用原始字符串(比如r"C:\users\admin")。 - 目标目录已存在:
shutil.copytree默认会在目标目录已存在时报错,加上dirs_exist_ok=True参数就能覆盖或者合并已存在的目录(Python 3.8+支持)。 - 相对路径的坑:如果你的脚本被其他程序调用,当前工作目录可能不是你预期的,所以转成绝对路径是更稳妥的做法。
内容的提问来源于stack exchange,提问作者user4532954
相关产品推荐
相关产品推荐

