Python中文件名中的冒号
众所周知,Windows中的文件名不能包含冒号。 但是,我遇到了一个问题,可以使用以下示例代码重现该问题:Python中文件名中的冒号,python,windows,filenames,ioerror,Python,Windows,Filenames,Ioerror,众所周知,Windows中的文件名不能包含冒号。 但是,我遇到了一个问题,可以使用以下示例代码重现该问题: import os os.chdir('./temp') names = ['a', 'b', 'word1: word2', 'c: file', 'd: file'] for name in names: with open(name, 'w') as f: f.write('foo') 此脚本在/temp目录中创建三个文件:a、b(带“foo”)和word
import os
os.chdir('./temp')
names = ['a', 'b', 'word1: word2', 'c: file', 'd: file']
for name in names:
with open(name, 'w') as f:
f.write('foo')
此脚本在/temp
目录中创建三个文件:a
、b
(带“foo”)和word1
(空)。它还在D:\
中创建一个名为file
的文件,它是可移动存储。它不会在C:\
中创建任何内容,这需要管理员权限才能写入;但是,它会在当前工作目录中创建一个文件
我不明白三件事:
word1
文件是空的李>
Windows NTFS支持文件“流”。基本上,您将数据附加到文件之外的文件中,无法正常查看。创建文件“word1:word2”时,隐藏流“word2”附加到“word1”。如果将文件word1复制到另一台NTFS计算机,word2数据将随附 到这里下载streams程序。运行它将向您显示word2是附加到word1的流 本页还讨论了流: 要真正轻松地证明这一点,您可以使用记事本,但需要使用.txt扩展名:
file=open('word1.txt:word2.txt','w')
file.write('Testing streams')
file.close()
现在,使用cmd程序,将目录更改为创建文件的位置。键入以下内容:
c:\tmp> notepad word1.txt
您将看到一个空文件。现在,试试这个:
c:\tmp> notepad word1.txt:word2.txt
您应该会看到文本
Testing streams
,它与您的观点非常相切(这是一个好问题),但在处理文件时请使用和
。传播良好的做法'word1:word2'
存储到名为'word2'
的备用NTFS流。使用dir/R word1
'file'
的文件。:
可能是文件名中的无效字符,但不是文件路径中的无效字符,传递给open
的是路径。就像/
在名称中是无效的,但是执行open(“/path/to/file”)
也是非常正常的。您也可以使用Python在隐藏流中读取:使用open('word1.txt:word2.txt')作为f:print f.read()