重新格式化同一字符串不起作用。我怎样才能做到这一点?



我想在循环中填充一个基本字符串,以访问名称中日历天数增加的文件。这是精简版本:

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])

这将提供预期的输出。希望对:)有所帮助

相关内容

最新更新