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就不会报错了,是什么原因呢?

阅读 2.5k
2 个回答

桌面没有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 显然不是 <流种类>

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题