使用带.format()的字符串作为open()的文件名

时间:2014-12-13 02:24:28

标签: python file string.format

在程序中,我想创建一个文本文件(.txt),其文件名包含一个字符串(分配给名为FileName的变量)。除了文件名中的字符串外,还有一个前缀:"特殊文件:"。在代码中我将前缀写为通常的前缀,但是为了包含变量赋值字符串,我使用.format()。

代码:

FileName = 'XYZ'
ActiveFile = open('Special File: {0}.txt'.format(FileName), 'a')

此代码当然有效,但它会创建文件,而不是文本文件。

如何修复代码以便创建文本文件而不是常规File

2 个答案:

答案 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文件。