Python 3.6处理含撇号文件名的文件打开问题
问题:Python 3.6(CentOS7)中无法打开含撇号的文件名
环境与现有代码
CentOS 7 环境,使用 Python 3.6(受限于虚拟机镜像),现有代码:
with open(filename, "r") as read_file: # do stuff
这段代码支持自动关闭文件,能正常处理含空格的文件名,但无法打开含撇号的文件名,报错信息:
Error reading Why Doesn't this Code Work?!.py: near "t": syntax error
已尝试的无效方法
- 使用f-string写法,无效果:
with open(f"{filename}", "r") as read_file: # do stuff
- 尝试给文件名套双引号,完全失效:
with open(f'"{filename}"', "r") as read_file: # do stuff
解决方案
首先明确:Python的open()函数本身完全支持含撇号的文件名,你遇到的语法错误根本不是open()导致的,而是**filename变量在传递过程中被错误解析了**——比如通过shell命令拼接时没处理好特殊字符。
具体解决步骤:
- 如果
filename来自命令行参数:直接用sys.argv读取,Python会自动处理带特殊字符的文件名,不需要额外转义。示例:import sys if len(sys.argv) >= 2: filename = sys.argv[1] with open(filename, "r") as read_file: # 执行你的操作 content = read_file.read() print(content) - 如果是通过shell执行脚本传递文件名:别用单引号包裹文件名,改用双引号,或者对撇号做转义(写成
Why Doesn\'t this Code Work?!.py),避免shell把撇号当成字符串结束符。 - 绝对不要手动给文件名加引号:
open()接收的是纯文件名字符串,你之前加双引号的操作会让Python去寻找带双引号的文件,自然找不到。
只要确保filename变量是正确的原始字符串,Python 3.6就能正常打开含撇号的文件。
内容的提问来源于stack exchange,提问作者CodeGorilla
相关产品推荐
相关产品推荐

