open()输出txt文件,奇怪报错

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

回到顶部