我想在循环中填充一个基本字符串,以访问名称中日历天数增加的文件。这是精简版本:
my_str = "filename_{}_blah.txt"
for n in range(3):
my_str = my_str.format(n)
print(my_str)
输出:
filename_0_blah.txt
filename_0_blah.txt
filename_0_blah.txt
我预计这些数字会增加。
(1(有没有办法解决这个问题,
(2(为什么会这样?
谢谢。
您需要使用不同的变量来保存格式字符串和结果。如果赋值回同一变量,则它不再包含格式字符串,则{}
已替换为n
的值。因此,下次没有占位符可以替换为下一个值n
。
format_str = "filename_{}_blah.txt"
for n in range(3):
my_str = format_str.format(n)
print(my_str)
(1( 是的,有
for n in range(3):
my_str = "filename_{}_blah.txt".format(n)
print(my_str)
(2(发生这种情况是因为您在第一次迭代中已经填充了字符串中的{}
,因此在该迭代之后,my_str
实际上变得filename_0_blah.txt
并且其中没有任何要格式化的内容
试试这个:
my_str = "filename_{}_blah.txt"
for n in range(3):
print(my_str.format(n));
正如@Barmar所说,代码中的问题是变量my_str = "filename_{}_blah.txt"
在第一个循环中更改为filename_0_blan.txt
。因此,代码my_str.format(n)
之后什么也做不了。
我想添加一个在python3.6之后可用的新解决方案:
for n in range(3):
my_str = f'filename_{n}_blah.txt'
您可以尝试以下代码:
my_str = 'filename_{}_blah.txt'
str_list=[]
for n in range(3):
str_list.append(my_str.format(n))
print(str_list[n])
这将提供预期的输出。希望对:)有所帮助