如何在Python中仅通过文件夹名查找路径,无需修改代码适配位置
在Python中用相对路径/文件夹名定位文件夹的可行方法
当然可以实现,以下几种方法能帮你摆脱绝对路径的束缚,移动文件夹不用改代码:
1. 基于脚本自身位置的相对路径(最推荐)
直接用./Donnees_Prevent/Donnees_par_impact/的问题在于,它是相对于你运行脚本时的工作目录,而非脚本本身所在的目录——如果从别的路径运行脚本,很容易找不到目标文件夹。更稳妥的方式是先获取脚本自己的位置,再拼接目标文件夹的相对路径:
用os模块实现:
import os # 获取当前脚本所在文件夹的绝对路径 script_folder = os.path.dirname(os.path.abspath(__file__)) # 拼接目标文件夹的相对路径 target_folder = os.path.join(script_folder, "Donnees_Prevent/Donnees_par_impact/")
用更简洁的pathlib(Python 3.4+推荐):
from pathlib import Path # 获取脚本的绝对路径,再取它的父文件夹(即脚本所在目录) script_dir = Path(__file__).resolve().parent # 直接用/拼接相对路径 target_folder = script_dir / "Donnees_Prevent" / "Donnees_par_impact"
只要你的脚本和目标文件夹的相对位置不变,哪怕整个项目文件夹移到别的磁盘、别的目录,代码都不用修改。
2. 从项目根目录出发的相对路径
如果你的项目有固定的根目录结构(比如根目录下有README.md或requirements.txt这类标志性文件),可以先定位到项目根目录,再往下查找目标文件夹:
from pathlib import Path # 从脚本位置往上遍历,直到找到包含README.md的文件夹(项目根目录) root_dir = Path(__file__).resolve() while not (root_dir / "README.md").exists(): root_dir = root_dir.parent # 从根目录拼接目标路径 target_folder = root_dir / "Donnees_joueur" / "Donnees_Prevent" / "Donnees_par_impact"
这种方式适合大型项目,哪怕脚本在项目内的位置变动,只要根目录的标志性文件还在,就能正确找到目标文件夹。
3. 全局搜索文件夹(不推荐)
如果实在不清楚目标文件夹的相对位置,只能通过全局遍历磁盘查找,但这种方法速度慢,且遇到重名文件夹时会返回第一个匹配的结果,准确率没保障:
import os def find_folder(target_name, start_path="C:/"): for dirpath, dirnames, _ in os.walk(start_path): if target_name in dirnames: return os.path.join(dirpath, target_name) # 查找Donnees_par_impact文件夹 target_folder = find_folder("Donnees_par_impact")
除非迫不得已,否则不建议使用这个方法。
内容的提问来源于stack exchange,提问作者Lucas Monnier
相关产品推荐
相关产品推荐

