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

发布于 2022-09-12 04:07:08 字数 449 浏览 9 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

疏忽 2022-09-19 04:07:08

桌面没有1:2:3.txt文件

给不了的爱 2022-09-19 04:07:08

在文件名后面跟一个冒号是有特殊含义的,表示这个路径指向该文件的一个 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 显然不是 <流种类>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文