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

Python configparser读取ini中Windows路径反斜杠转义问题

问题根因

你当前的配置写法把备份路径直接作为[folders]段下的无值键名存储,而INI格式语法中,=和:都是configparser默认的键值分隔符。Windows盘符路径自带的:(比如Z:\Desktop\winpython里的Z:)会被识别为键值分割标记,最终只把冒号前的Z解析为键名,传入tarfile后自然会提示找不到名为'Z'的文件,和反斜杠转义没有直接关系。

解决方案

可任选以下一种方案修复,优先选择跨平台兼容的实现:

方案1:改配置为标准键值对格式(最稳妥,无兼容问题)

不要把路径当键名书写,改成标准键值对格式,从根源避开冒号被识别为分隔符的问题;读取时开启原始字符串模式,不做任何转义、插值处理,效果和硬编码r''原始字符串完全一致。

修正后的backupcfg.ini示例

[folders]
# Linux路径示例
path1 = /home/david/docs
path2 = /home/david/images
path3 = /home/david/videos
# Windows路径示例,直接写单反斜杠即可,不需要手动转义
path4 = Z:\Desktop\winpython
path5 = Z:\images\family

[ftp]
username=etc
password=pwd

对应读取代码

import configparser
import datetime
import tarfile
import os

config = configparser.ConfigParser(allow_no_value=True)
config.optionxform = lambda option: option  # 保留路径大小写
config.read('backupcfg.ini')

filelistings = []
# 遍历folders段下所有配置项,读取原始路径值
for path_key in config.options("folders"):
    # raw=True表示直接返回原始字符串,不做转义、插值处理
    folder_path = config.get("folders", path_key, raw=True)
    # 自动规范化路径分隔符,适配Windows/Linux系统
    filelistings.append(os.path.normpath(folder_path.strip("'")))

now = datetime.datetime.now()
zipname = f'backup.{now.strftime("%Y.%m.%d")}.tgz'

with tarfile.open(zipname, "w:gz") as tar:
    for path in filelistings:
        print(f"Adding {path}")
        tar.add(path)

方案2:保留原有配置结构,修改代码解析规则

如果你想保持「[folders]下每行直接写一个路径」的书写习惯,只需要在初始化configparser时,手动指定仅将=作为键值分隔符,不再识别冒号为分隔符即可:

# 关键配置:delimiters指定只认等号为键值分隔符,interpolation=None关闭插值转义
config = configparser.ConfigParser(
    allow_no_value=True,
    delimiters=('=',),
    interpolation=None
)
config.optionxform = lambda option: option
config.read('backupcfg.ini')

调整后ini里的路径可以直接按原有格式书写,Windows路径写单反斜杠、正斜杠都能被完整读取,读取后同样用os.path.normpath()做路径规范化即可,不需要硬编码r前缀。

注意:Windows系统原生API完全支持正斜杠/作为路径分隔符,跨平台脚本统一用正斜杠写路径可以减少很多分隔符适配问题。

内容的提问来源于stack exchange,提问作者David Lloret

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:39:18