在Python中使用多个%s格式化输出名称

2024-03-28 06:46:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在一个嵌套循环中动态创建多个文件名,比如说为2个参与者创建,每个参与者有4个不同的会话。我的目标是创建如下文件名:

  • 学习\ S1 \ P1.xlsx;学习\ S2 \ P1.xlsx;学习\ S3 \ P1.xlsx;学习\ S4 \ P1.xlsx
  • 正在学习\u S1 \u P2.xlsx。。。学习\u S4 \u P2.xlsx

我的代码是:

filename = {}
for y in range(0,4):
    for i in range(0,2):
        filename[y][i] = 'Learning_S%s_P%s.xlsx' % (1+y,1+i)

但是,我收到KeyError:0。我被阻止了,找不到解决方案。任何帮助都将不胜感激。你知道吗

非常感谢


Tags: in目标for文件名rangefilenamexlsx参与者
2条回答

与字符串无关。 你得到KeyError是因为你写了

filename[y][i]

filename[y] = {}
filename[y][i] = 'whatever'

(您可以使用format()而不是%s语法。)

建议:面对这类问题时,尽量把几句话分开。你知道吗

这条线本身很好:

filename[y][i] = 'Learning_S%s_P%s.xlsx' % (1+y,1+i)

但当它引发一个异常时,就把它一分为二:

value = 'Learning_S%s_P%s.xlsx' % (1+y,1+i)    
filename[y][i] = value

很明显,错误是由第二行引起的,与字符串无关。你知道吗

这个问题与您的字符串格式没有任何关系。尝试在dict中设置项时会出现错误。这是因为您尝试在嵌套dict中设置项,而从未创建内部字典:filename[y]不存在,因此无法执行filename[y][i]。你知道吗

您可以通过在外循环中创建dict来解决此问题:

filename = {}
for y in range(0,4):
    filename[y] = {}
    for i in range(0,2):
        filename[y][i] = 'Learning_S%s_P%s.xlsx' % (1+y,1+i)

尽管我会质疑dict是否是这里的正确数据结构:似乎嵌套列表更合适:

filename = []
for y in range(0,4):
    inner = []
    for i in range(0,2):
        inner.append('Learning_S%s_P%s.xlsx' % (1+y,1+i))
    filename.append(inner)

相关问题 更多 >