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

Python pandas读写Excel硬编码路径如何实现跨设备通用

路径硬编码改造方案

核心思路是完全替换写死的绝对路径字符串,通过系统原生接口动态获取当前用户的标准目录路径,配合自动路径拼接、文件检索逻辑,适配所有Windows设备,不需要针对不同电脑修改代码。


基础依赖说明

所有用到的路径处理能力均来自Python 3.4+版本自带的标准库,不需要额外安装第三方包:

  • pathlib:自动适配Windows/macOS的路径分隔符,避免手动拼接斜杠/反斜杠导致的报错
  • Windows API调用模块:精准获取用户自定义过位置的桌面、文档文件夹(比如很多用户会把桌面移到非系统盘,手动拼接路径会失效)

导入逻辑改造:动态定位桌面+自动匹配目标文件

改造后的代码会自动获取当前用户的桌面路径,递归检索桌面下所有xlsx文件,按关键词匹配你需要的导入文件,不需要写死完整文件名、文件夹名里的日期或版本号:

import pandas as pd
from pathlib import Path
import ctypes
from ctypes import wintypes

# 调用Windows系统接口获取标准文件夹真实路径,适配修改过默认存储位置的用户
def get_known_folder_path(folder_id):
    buf = ctypes.create_unicode_buffer(wintypes.MAX_PATH)
    ctypes.windll.shell32.SHGetFolderPathW(None, folder_id, None, 0, buf)
    return Path(buf.value)

# 系统文件夹ID常量:桌面对应0x0000,我的文档对应0x0005
DESKTOP_PATH = get_known_folder_path(0x0000)
# *轻量替代写法:不需要考虑用户改默认文件夹位置的话,直接用下面这行即可,适配90%以上普通场景
# DESKTOP_PATH = Path.home() / "Desktop"

# 自动检索目标xlsx文件:匹配文件名包含"Katalog_CJM"的xlsx
target_import_file = None
# rglob表示递归遍历桌面所有子文件夹,如果文件直接放在桌面根目录,换成glob("*.xlsx")即可
for file in DESKTOP_PATH.rglob("*.xlsx"):
    if "Katalog_CJM" in file.name:
        target_import_file = file
        break

# 找不到文件时抛出明确提示,避免出现晦涩的路径不存在报错
if not target_import_file:
    raise FileNotFoundError("未在桌面及子目录下找到文件名包含Katalog_CJM的xlsx文件,请检查文件存放位置")

# 读取文件,路径完全动态生成
katalog_CJM = pd.read_excel(
    target_import_file,
    sheet_name='Katalog'
)

如果需要匹配特定名称的子文件夹(比如你原来路径里带可变日期的Catalogue - 20.07.-09.08.2022 - EXAMPLE文件夹),可以在遍历逻辑里加文件夹名关键词判断,不需要写死完整日期字符串。


导出逻辑改造:自动创建目录+适配任意用户路径

导出时同样动态拼接目标路径,如果目标导出文件夹不存在,代码会自动创建,不会抛出路径不存在的错误。示例代码实现导出到桌面的指定文件夹:

# 定义导出目录,依然基于动态获取的桌面路径
export_dir = DESKTOP_PATH / "EXPORT_PO_DOBAVLJACIMA"
# 目录不存在则自动创建,exist_ok=True表示目录已存在时不报错
export_dir.mkdir(exist_ok=True)
# 拼接导出文件的完整路径
export_file_path = export_dir / "Venera.xlsx"

# 执行导出
Venera_merge.to_excel(
    export_file_path,
    index=False
)
print(f"文件导出完成,存储路径:{export_file_path}")

如果需要导出到「我的文档」目录,只要替换路径获取逻辑即可:

DOCS_PATH = get_known_folder_path(0x0005)
export_dir = DOCS_PATH / "EXPORT_PO_DOBAVLJACIMA"

可选:相对路径方案(适合脚本+数据打包分发场景)

如果你打算把脚本和数据文件打包成压缩包发给其他人使用,不需要用户把文件放到指定位置,只要保持压缩包内的文件相对位置不变,就可以基于脚本自身的位置做相对路径定位,兼容性最强:

# 获取当前运行的py脚本所在的文件夹绝对路径
SCRIPT_FOLDER = Path(__file__).parent.resolve()
# 比如导入文件存放在脚本同级的data文件夹下,直接拼接相对路径
import_file = SCRIPT_FOLDER / "data" / "katalog_source.xlsx"
# 导出文件存放在脚本同级的export文件夹下
export_dir = SCRIPT_FOLDER / "export"
export_dir.mkdir(exist_ok=True)

注意事项

  • 所有路径拼接统一用pathlib的/运算符,不要手动拼接\或/符号
  • 文件匹配尽量用关键词规则,不要写死带版本、日期的完整文件名,后续更新文件时不需要修改代码
  • 涉及文件读写的逻辑前加存在性判断,出错时给出明确提示,降低排查成本

内容的提问来源于stack exchange,提问作者Adi Šehić

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:36:26