Python中调用文件路径的正确科学方法是什么?
项目结构
-- data
* config.ini
-- lib
* __init__.py
* utils.py
* main.py
utils 内封装了读取 ini 的方法,其中路径获取方式为:
self.path = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))+'/data/config.ini'
self.cf = ConfigParser.ConfigParser()
self.cf.read(self.path)
问题描述:
lib 会被安装 site-packages 中,utils 中 self.path 获取路径错误,以下是获取错误的地址与真实地址
- /Users/qq/Desktop/test/lib/python2.7/site-packages/hhh-1.3.1-py2.7.egg/data/config.ini
- /Users/qq/Desktop/test/app/data/config.ini
问题
- 请问工程内,python 调用文件路径正确科学的方法是什么?
Python中调用文件路径的正确科学方法是什么?
8 回复
self.path = os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(file)), “…”))+’/data/config.ini’
self.cf = ConfigParser.ConfigParser()
self.cf.read(self.path)
这样试试?
用 pathlib 就对了,这是现在处理文件路径的标准方式。
from pathlib import Path
# 创建路径对象
current_dir = Path.cwd() # 当前工作目录
home_dir = Path.home() # 用户主目录
# 构建路径 - 用 / 运算符,很直观
config_file = current_dir / "config" / "settings.json"
data_file = home_dir / "data" / "dataset.csv"
# 路径操作
print(f"文件存在: {config_file.exists()}")
print(f"是文件: {config_file.is_file()}")
print(f"父目录: {config_file.parent}")
print(f"文件名: {config_file.name}")
print(f"后缀: {config_file.suffix}")
# 读取文件内容
if config_file.exists():
content = config_file.read_text(encoding='utf-8')
# 或者用 read_bytes() 读取二进制
# 写入文件
data_file.parent.mkdir(parents=True, exist_ok=True) # 确保目录存在
data_file.write_text("your data here", encoding='utf-8')
# 遍历目录
for file_path in current_dir.glob("*.py"): # 所有.py文件
print(f"Python文件: {file_path}")
# 路径解析
path = Path("/home/user/docs/report.pdf")
print(f"根目录: {path.anchor}")
print(f"所有部分: {path.parts}")
pathlib 的好处是:
- 跨平台(Windows/Unix路径自动处理)
- 面向对象,方法链式调用
- 不用操心字符串拼接和斜杠问题
- Path对象可以直接传给open()等函数
老式的 os.path 还能用,但新项目建议直接用 pathlib。
一句话:现在都用 pathlib.Path,别再用字符串拼接路径了。
封装逻辑有问题,配置文件路径作为参数传进去
感谢回复,问题依旧
配置文件和代码一起安装到 site-packages 里面
既然 lib 都被安装到 site-packages 中了,file 的路径就变了,不是原来的了
同意
我习惯于把路径放在一个专门的配置文件里

