Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用带.format()的字符串作为open()的文件名_Python_File_String.format - Fatal编程技术网

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

Python 使用带.format()的字符串作为open()的文件名,python,file,string.format,Python,File,String.format,在程序中,我想创建一个文本文件(.txt),文件名包含一个字符串(分配给名为FileName的变量)。除了文件名中的字符串外,还有一个前缀:“特殊文件:”。在代码中,我像通常一样编写前缀,但为了包含变量分配的字符串,我使用.format() 代码: 这段代码当然可以工作,但是它创建了一个文件,而不是一个文本文件 如何修复代码以创建文本文件而不是常规的文件 FileName = 'XYZ' ActiveFile = open('{}.txt'.format(FileName), 'a') 它正在

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

代码:

这段代码当然可以工作,但是它创建了一个文件,而不是一个文本文件

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

FileName = 'XYZ'
ActiveFile = open('{}.txt'.format(FileName), 'a')
它正在用format方法打开一个.txt文件


它正在用format方法打开一个.txt文件。

这里的问题与Python无关。实际上,您已经创建了一个名为
特殊文件:XYZ.txt
的文本文件。但你不应该这么做,这让探险家很困惑

Windows文件名不应包含
字符,如MSDN上的中所述。但是:

shell和文件系统有不同的要求。可以使用Windows API创建shell用户界面无法正确解释的路径

这就是你所做的。您已经使用Windows API创建了一个shell(又称Windows资源管理器)无法正确解释的路径(通过MSVCRT通过Windows API创建Python)

解决方案很简单:不要在文件名中使用冒号或任何其他保留字符,
“/\ \124;?*
,也不要破坏该MSDN文档中的任何其他规则

如果在实际程序中,
来自数据或用户输入,而不是硬编码到路径名中,通常的处理方法是(a)以错误拒绝它,或(b)用
\u
或其他替换替换任何非法字符。(例如,在iTunes中,名为
I Die:You Die
的歌曲将保存在名为
01 I Die\u You Die.mp3
的文件中)



如果仔细想想,这个规则的原因很明显:Windows在路径名中使用冒号将驱动器号与路径的其余部分分开。因此,像
C:D
这样的名称在驱动器
C
的当前工作目录中的“file
D
与”之间是不明确的文件
C:D
,位于当前驱动器的当前工作目录中。

您这里的问题与Python无关。您实际上已经创建了一个名为
Special file:XYZ.txt
的文本文件。但您不应该这样做,这会让Explorer感到困惑

Windows文件名不应包含
字符,如MSDN中所述。但是:

shell和文件系统有不同的要求。可以使用Windows API创建shell用户界面无法正确解释的路径

这就是你所做的。你用Windows API(好吧,Python通过MSVCRT通过Windows API)创建了一个shell(又称Windows资源管理器)无法正确解释的路径

解决方案很简单:不要在文件名中使用冒号或任何其他保留字符,
“/\ \124;?*
,也不要破坏该MSDN文档中的任何其他规则

如果在实际程序中,
来自数据或用户输入,而不是硬编码到路径名中,通常的处理方法是(a)以错误拒绝它,或(b)用
\u
或其他替换替换任何非法字符。(例如,在iTunes中,名为
I Die:You Die
的歌曲将保存在名为
01 I Die\u You Die.mp3
的文件中)



如果仔细想想,这个规则的原因很明显:Windows在路径名中使用冒号将驱动器号与路径的其余部分分开。因此,像
C:D
这样的名称在驱动器
C
的当前工作目录中的“file
D
与驱动器
C
的当前工作目录”之间是不明确的。“当前驱动器当前工作目录中的文件
C:D

您所说的“文本文件”是什么意思?
'a'
模式(与
'ab'
相反)总是打开一个文本文件。文件名,或者你如何创建它,与任何事情都无关。你是说txt文件吗?而且,没有
文件
这样的类型。在Python2.x中,文本和二进制文件都是
文件
(小写)类型。在Python3.x中,它们是
io.TextIOWrapper
io.BufferedReader
(或者是其中的一些子类)。(PS,这可能有助于了解您使用的是2.x还是3.x,以猜测您对“文本文件”的期望值。在2.x中,它只意味着您获得了换行翻译;在3.x中,它意味着您读写Unicode而不是字节。)@qqvc:即使他的意思是……他的代码也已经这样做了;它创建了一个名为
“Special file:XYZ.txt”
的文件(除非他所在的平台对文件名中的
有特殊意义,比如VMS或classic Mac,在这种情况下,他可能会得到一个错误,而不是任何类型的文件…)@如果“a”模式总是打开一个文本文件,我的程序怎么会用它创建文本文件?你说的“文本文件”是什么意思?
'a'
模式(与
'ab'
相反)总是打开一个文本文件。文件名,或者你如何创建它,与任何事情都无关。你是说txt文件吗?而且,没有
文件
这样的类型。在Python2.x中,文本和二进制文件都是
文件
(小写)类型。在Python3.x中,它们是
io.TextIOWrapper
io.BufferedReader
(或者是其中的一些子类)。(PS,这可能有助于了解您使用的是2.x还是3.x,以猜测您对“文本文件”的期望值。在2.x中,它只意味着您获得了换行翻译;在3.x中,它意味着您读写Unicode而不是字节。)@QVC:即使他的意思是……他的代码也已经在这样做了;它创建了一个名为“Special file:XYZ.txt”的文件
FileName = 'XYZ'
ActiveFile = open('{}.txt'.format(FileName), 'a')