You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python pathlib是否有便捷方法实现路径与文件转换?含Pandas CSV场景

解决pathlib跨目录路径构建问题,结合Pandas读写CSV

核心问题出在你依赖了Path.cwd()——当前工作目录,一旦运行脚本的目录改变,路径就会失效。正确的做法是基于脚本文件的实际位置构建绝对路径,不管在哪运行都能准确定位到项目内的文件。

修正路径构建函数

首先修正path_to函数,用__file__获取当前脚本的路径,以此为基准定位项目根目录:

import pathlib
from typing import Path

def path_to(subdir: str, name: str) -> Path:
    """从项目根目录定位到指定子目录下的文件"""
    # 获取当前脚本所在的src目录(绝对路径)
    src_dir = pathlib.Path(__file__).parent.resolve()
    # 向上跳一级到项目根目录
    project_root = src_dir.parent
    # 拼接目标子目录和文件名
    return project_root / subdir / name

注:原来的函数返回类型标注错误,应该返回Path而非TextIO,这里一并修正。

调用代码无需大改

Pandas的read_csv(以及to_csv)直接支持Path对象,所以你的get_files函数可以直接沿用,完全兼容:

import pandas as pd

def get_files(f, dir1):
    """从指定子目录读取文件并转为DataFrame"""
    file_1 = path_to(dir1, f)
    try:
        df = pd.read_csv(
            file_1,
            encoding="UTF-8",
            infer_datetime_format=True,
            thousands=",",
            index_col=False,
        )
    except FileNotFoundError:
        df = pd.DataFrame(columns=col_save_all)
    return df

如果需要写入CSV,同样直接传Path对象即可:

df.to_csv(project_root / "output" / "result.csv", encoding="UTF-8", index=False)

额外优化建议

  • 可以把项目根目录定义为常量,复用更方便:
    PROJECT_ROOT = pathlib.Path(__file__).parent.parent.resolve()
    
  • 用resolve()可以把相对路径转换为绝对路径,避免路径歧义,同时自动处理..这类上级目录的写法。

内容的提问来源于stack exchange,提问作者Steve Maguire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:39:28