Python传入配置文件读取的路径打开文件报OSError22错误
问题根因
触发OSError: [Errno 22] Invalid argument的核心原因是配置文件中的路径值额外包裹了双引号。configparser读取配置项时,不会自动将值外层的双引号识别为字符串边界符号,会直接把这对双引号作为内容拼接到最终读取到的路径字符串里。从报错信息可以看到,传入open()函数的路径首尾多了一层不属于合法路径组成的双引号:'"C:\\Users\XXXX\Documents\Documents\PythonRun\Scripts\AATEST\do\products.txt"',自然会被系统判定为无效路径。
你后续尝试的path = r'{}'.format(configParser.get('APP', 'path'))写法,只是对已经带多余引号的字符串做了原始字符串转换,根本没有移除首尾的非法引号字符,所以报错完全没有变化。
修复方案
两种方案选择任意一种即可:
- 方案1:直接修改配置文件,移除路径值外层的双引号
将config.txt中的path配置调整为如下形式,不要给路径值加引号:
修改完成后原有读取代码不需要做任何调整,即可正常读取文件。[APP] path = C:\Users\XXXX\Documents\Documents\PythonRun\Scripts\AATEST\do\products.txt - 方案2:如果不方便修改配置文件,就在代码读取配置项后手动清理多余字符
读取path的逻辑增加一步首尾字符清理,移除多余的引号和首尾空白:import configparser configParser = configparser.RawConfigParser() configFilePath = r'\\NetworkPath\Subfolder\Users\Me\New folder\config.txt' configParser.read(configFilePath) path = configParser.get('APP', 'path').strip().strip('"')
补充说明:原始字符串前缀
r''只适用于你在Python代码里直接硬编码写Windows路径的场景,用来避免反斜杠被识别为转义符。从配置文件读取到的路径本身已经正确保留了反斜杠字符,额外套一层r''做转换没有实际作用,也解决不了引号导致的路径非法问题。
内容的提问来源于stack exchange,提问作者Aithani
相关产品推荐
相关产品推荐

