在程序中,我想创建一个文本文件(.txt),其文件名包含一个字符串(分配给名为FileName
的变量)。除了文件名中的字符串外,还有一个前缀:"特殊文件:"。在代码中我将前缀写为通常的前缀,但是为了包含变量赋值字符串,我使用.format()。
代码:
FileName = 'XYZ'
ActiveFile = open('Special File: {0}.txt'.format(FileName), 'a')
此代码当然有效,但它会创建文件,而不是文本文件。
如何修复代码以便创建文本文件而不是常规File
?
答案 0 :(得分:5)
这里的问题与Python无关。您实际上已经创建了一个名为Special File: XYZ.txt
的文本文件。但是你不应该这样做,这让资源管理器感到困惑。
Windows文件名不应包含:
字符,如MSDN上Naming Files, Paths, and Namespaces中所述。但是:
shell和文件系统有不同的要求。可以使用Windows API创建一个shell用户界面无法正确解释的路径。
这就是你所做的。您已经使用Windows API创建了一个路径(嗯,通过Windows API通过MSVCRT进行Python),shell(也称为Windows资源管理器)无法正确解释。
解决方案很简单:不要在文件名或任何其他保留字符<>"/\|?*
中使用冒号,也不要破坏该MSDN文档中的任何其他规则。
如果在您的真实程序中,:
来自数据或用户输入而不是硬编码到路径名中,处理此问题的常用方法是(a)拒绝错误,或(b)用_
或其他替换替换任何非法字符。 (例如,在iTunes中,名为I Die: You Die
的歌曲将保存在名为01 I Die_ You Die.mp3
的文件中。)
如果您考虑一下,此规则的原因非常明显:Windows在路径名中使用冒号将驱动器号与路径的其余部分分开。因此,C:D
之类的名称在驱动器D
的当前工作目录中的文件C
与当前工作目录中的文件C:D
之间不明确。当前的驱动器“。
答案 1 :(得分:-1)
FileName = 'XYZ'
ActiveFile = open('{}.txt'.format(FileName), 'a')
用格式化方法打开.txt文件。