在Python中将整数转换为字符串

53
我希望能够生成一些名为fileX.txt的文本文件,其中X是某个整数:
for i in range(key):
    filename = "ME" + i + ".txt" //Error here! Can't concat a string and int
    filenum = filename
    filenum = open(filename , 'w')  

还有其他人知道如何执行 filename = "ME" + i 部分,以便我得到文件名列表:"ME0.txt","ME1.txt","ME2.txt"等等。


2
Python比像Perl和Rexx这样的语言更强类型化,不会进行隐式类型转换。 - Nick T
6个回答

97

19

对于Python 2.6之前的版本,请使用字符串格式化操作符%

filename = "ME%d.txt" % i

对于Python 2.6及以上版本,请使用str.format()方法:

filename = "ME{0}.txt".format(i)

虽然第一个示例在2.6中仍然有效,但更推荐使用第二个示例。

如果你有超过10个需要这样命名的文件,建议添加前导零,以便在目录列表中正确排序文件:

filename = "ME%02d.txt" % i
filename = "ME{0:02d}.txt".format(i)

这将生成类似于ME00.txtME99.txt的文件名。如果需要更多位数,可以将示例中的2替换为更高的数字(例如:ME{0:03d}.txt)。


在任何情况下,如果没有静态文件名,我都不会使用它。如果来自用户输入,可能会发生很多奇怪的事情。 - Bachsau
@Bachsau -- 抱歉,我看不出用户输入与此有任何关系。验证用户输入是一个完全独立的问题。 - Ferdinand Beyer
str.format()字符串包含很多特殊字符。您需要对它们进行转义,否则当用户定义的字符串包含任何这些字符时,它将会出错。因此,当您使用用户输入并且字符串不是过于复杂时,例如只是在文件名和扩展名之间插入一个数字,最好只使用字符串连接:"name" + int(num) + "ext"。用户输入是指您在代码中未定义的所有内容,包括从文件、目录或网络获得的名称。 - Bachsau
当然可以,但是需要注意的是:验证用户输入是一个独立的问题。当然你不应该直接将用户输入传递给 str.format(),但是同样地:在任何情况下都不应该使用没有检查文件名的用户输入。但这与这个问题有什么关系呢? - Ferdinand Beyer

4

要么:

"ME" + str(i)

或者:

"ME%d" % i

第二种方式通常更受欢迎,特别是当您想从多个标记构建一个字符串时。

3
您可以使用str()进行类型转换,或者使用格式化方法:
"ME%d.txt" % (num,)

0

适用于Python 3和Python 2.7

for i in range(50):
    filename = "example{:03d}.txt".format(i)
    print(filename)

使用格式{:03d},可以在前面添加3个数字0,这是一个很好的技巧,让文件在资源管理器中按正确顺序显示。如果要使用默认格式,请将括号留空{}
# output
example000.txt
example001.txt
example002.txt
example003.txt

0

这里是关于你整个代码的答案:

key =10

files = ("ME%i.txt" % i for i in range(key))

#opening
files = [ open(filename, 'w') for filename in files]

# processing
for i, file in zip(range(key),files):
    file.write(str(i))
# closing
for openfile in files:
    openfile.close()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接