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

时间:2015-03-27 09:56:44

标签: python ipython

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

  • Learning_S1_P1.xlsx; Learning_S2_P1.xlsx; Learning_S3_P1.xlsx; Learning_S4_P1.xlsx
  • Learning_S1_P2.xlsx; ... Learning_S4_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。我被阻止了,无法找到解决方案。任何帮助将不胜感激。

非常感谢,

2 个答案:

答案 0 :(得分:3)

该问题与您的字符串格式没有任何关系。当您尝试在词典中设置项目时,错误即将发生。这是因为您尝试在嵌套字典中设置项目,而没有创建内部字典: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)

虽然我会质疑dicts是否是正确的数据结构:看起来嵌套列表更合适:

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)

答案 1 :(得分:0)

与字符串无关。 你得到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

很明显,错误是由第二行引发的,与字符串无关。