为何Python的open函数可打开含多余点或空格的错误文件名?
为什么Python的open函数允许末尾带多余空格或点的文件名?
首先要明确:Python的open()函数本身不会对文件名做任何额外过滤或修改——它只是把你传入的文件名直接交给操作系统的文件系统API处理。能不能打开,完全取决于你的操作系统是否允许这个文件名存在。
从你的实验结果来看:
>>> open('myfile.txt') <_io.TextIOWrapper name='fruit.iml' mode='r' encoding='cp1252'> >>> open('myfile.txt.') <_io.TextIOWrapper name='fruit.iml.' mode='r' encoding='cp1252'> >>> open('myfile.txt. ') <_io.TextIOWrapper name='fruit.iml. ' mode='r' encoding='cp1252'> >>> open('myfile.txt. x') Traceback (most recent call last): File "<stdin>", line 1, in <module> FileNotFoundError: [Errno 2] No such file or directory: 'myfile.txt. x'
- 前三个调用能成功,是因为你的操作系统(从编码
cp1252判断是Windows)允许文件名末尾包含点或空格。现在的Windows版本已经取消了早期自动截断末尾点/空格的限制,只要通过程序API创建或访问,就能保留这些字符。 - 最后一个调用报错,单纯是因为系统里不存在
myfile.txt. x这个文件,和末尾的空格、点无关——如果这个文件真的存在,open()同样能打开它。
关于Python的"容错性":
Python的open()根本不存在什么特殊的容错逻辑,它完全遵循底层系统的规则。Unix/Linux类系统(比如Linux、macOS)从一开始就允许文件名包含任意字符(除了/和空字符),末尾的点、空格本来就是合法的;Windows现在也支持这类文件名,所以open()自然能处理。
内容的提问来源于stack exchange,提问作者Eric Wilson
相关产品推荐
相关产品推荐

