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

Windows文件路径同时出现正斜杠与反斜杠的原因及解决方法

问题:glob模块获取的文件路径同时包含正斜杠和反斜杠

代码示例

import glob
import xml.etree.ElementTree as xet  # 补充代码中用到的模块导入

path = glob('./images/*.xml')
print(path)
labels_dict = dict(filepath=[],xmin=[],xmax=[],ymin=[],ymax=[])
for filename in path:
    print(filename)
    info = xet.parse(filename)
    root = info.getroot()
    member_object = root.find('object')
    labels_info = member_object.find('bndbox')
    xmin = int(labels_info.find('xmin').text)
    xmax = int(labels_info.find('xmax').text)
    ymin = int(labels_info.find('ymin').text)
    ymax = int(labels_info.find('ymax').text)
    labels_dict['filepath'].append(filename)
    labels_dict['xmin'].append(xmin)
    labels_dict['xmax'].append(xmax)
    labels_dict['ymin'].append(ymin)
    labels_dict['ymax'].append(ymax)

运行结果

['./images\\N1.xml', './images\\N100.xml']
./images\N1.xml
./images\N100.xml

原因

你是在Windows系统上运行代码:glob模块会自动适配系统默认的路径分隔符(Windows用反斜杠\),但你传入的匹配路径用了正斜杠./images/*.xml,所以返回的路径保留了输入的正斜杠前缀,同时将匹配到的文件名部分替换为系统的反斜杠,最终导致两种分隔符混合出现。

解决方法

  • 方法一:用pathlib统一处理路径(推荐)
    Python 3.4+自带的pathlib模块可跨系统统一处理路径,自动适配分隔符,代码修改如下:

    from pathlib import Path
    import xml.etree.ElementTree as xet
    
    # 获取路径对象列表
    path_objects = list(Path('./images').glob('*.xml'))
    # 转成字符串格式路径(自动使用系统分隔符)
    path = [str(p) for p in path_objects]
    print(path)
    
    labels_dict = dict(filepath=[],xmin=[],xmax=[],ymin=[],ymax=[])
    for filename in path_objects:  # 也可直接用路径对象解析xml
        print(filename)
        info = xet.parse(filename)
        # 后续逻辑保持不变
    

    如果想强制使用正斜杠,改用as_posix()方法:

    path = [p.as_posix() for p in Path('./images').glob('*.xml')]
    
  • 方法二:用os.path模块标准化路径
    利用os.path.normpath()将混合路径转换为系统标准格式:

    import os
    import glob
    import xml.etree.ElementTree as xet
    
    path = glob.glob('./images/*.xml')
    # 统一转换为系统标准路径
    path = [os.path.normpath(p) for p in path]
    print(path)
    
    # 后续处理逻辑不变
    

    os.path.abspath()也能达到类似效果,同时会将相对路径转为绝对路径。

  • 方法三:手动替换分隔符
    如果想强制统一使用正斜杠,直接做字符串替换:

    import glob
    import xml.etree.ElementTree as xet
    
    path = glob.glob('./images/*.xml')
    path = [p.replace('\\', '/') for p in path]
    print(path)
    
    # 后续处理逻辑不变
    

内容的提问来源于stack exchange,提问作者Rony Shaji

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:13:16