open()输出txt文件,奇怪报错
python3.8.5
代码如下:
x = open("C:\\Users\\abc\\Desktop\\" + "1:2:3" + ".txt","w+")
报错如下:
Traceback (most recent call last): File "<pyshell#33>", line 1, in <module>
x = open("C:\\Users\\abc\\Desktop\\" + "1:2:3" + ".txt","w+")
OSError: [Errno 22] Invalid argument: 'C:\\Users\\abc\\Desktop\\1:2:3.txt'
如果把1:2:3.txt
改成1:2.txt
就不会报错了,是什么原因呢?
回答:
桌面没有1:2:3.txt
文件
回答:
在文件名后面跟一个冒号是有特殊含义的,表示这个路径指向该文件的一个 ntfs alternate data streams (可以去搜搜这个名词)。
具体到这里,1:2.txt
不会报错是因为创建了一个名字叫 1
的文件,并为这个文件创建了一个名字叫 2.txt
的 alternate data stream,并且之后如果你写入了内容的话,写入的内容都是会存到这个 alternate data stream 里去的。
具体可以根据这篇博客:NTFS格式下的Alternate Data Streams 里面的“测试”来验证:
echo test1 > test1.txt //将test1写入test1.txt中 echo test2 > test2.txt //将test2写入test2.txt中
type test2.txt > test1.txt:test2.txt //将test2.txt内容写入1.txt的ADS 1.txt:2.txt中
del test2.txt //删除test2.txt
type test1.txt //内容显示为test1
type test2.txt //已经删除了这个文件所以找不到内容
type test1.txt:test2.txt //内容显示为test2
可以将上面在命令行的代码转变为 python 代码来测试。
1:2:3.txt
报错的原因便是格式是非法的,普通的文件名是不能含有 ":" 字符的,如果含有,那就是 ntfs alternate data streams 的格式含义!那么两个冒号 "::" 就需要符合格式,第二个冒号后面跟的内容应该是符合 <流种类>
的!!!
而 3.txt
显然不是 <流种类>
。
以上是 open()输出txt文件,奇怪报错 的全部内容, 来源链接: utcz.com/p/937864.html