Python如何定位作为参数传入的文件?是否存在默认搜索路径?
Python 对命令行传入文件的路径解析规则
你的初始猜测是正确的,默认情况下传入的test.csv会被视为./test.csv,到执行命令时的当前工作目录下查找,具体逻辑如下:
- 命令行参数里的文件名本质只是字符串,Python不会为这类普通文件路径提供默认的全局搜索路径,路径解析遵循操作系统的通用规则:
- 传入绝对路径(如
/home/john/data/test.csv)时,直接按给定路径定位文件 - 传入相对路径时,会和执行命令所在的shell工作目录拼接,得到目标文件的完整路径
- 传入绝对路径(如
- Python 只有两类场景自带搜索路径逻辑,不适用普通参数文件的查找:
- 执行
import导入模块/包时,会遍历sys.path列表中的路径查找对应文件 - 部分特定功能的库(如配置加载库)会自己实现多路径扫描逻辑,比如依次查找当前目录、用户家目录、系统配置目录等,但这是库的自定义规则,不是Python默认提供的能力
- 执行
- 如果你不希望文件查找依赖执行命令的工作目录,可以在代码中自行处理路径:比如先拿到当前脚本所在的绝对目录,再和传入的文件名拼接,这样无论在哪个目录执行脚本,都能定位到和脚本同目录的目标文件,参考实现:
import os import sys # 获取当前脚本的绝对所在目录 script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接得到目标文件的绝对路径 target_file = os.path.join(script_dir, sys.argv[1])
如果没有自行实现上述的路径处理逻辑,作为参数传入的相对路径文件就只能在当前工作目录下查找,没有其他默认搜索路径。
内容的提问来源于stack exchange,提问作者Yohn Ald
相关产品推荐
相关产品推荐

