Python多行字符串格式

时间:2012-10-23 05:12:09

标签: python

我正在尝试使用脚本为我生成一些makefile。我想格式化这个多行字符串,但是我收到了一个奇怪的错误。

代码:

make_content = """ PCC = pgcc 
%(bench)_serial: src/main.c src/%(bench)_serial.c ../common/util.c
\t$(PCC) $(ACCFLAGS) -o bin/%(bench)_serial src/main.c src/%(bench)_serial.c

clean:
\trm -rf *.o *.oo bin/*""" % {'bench':'umpalumpa'}

错误:

Traceback (most recent call last):
  File "./new_bench.py", line 27, in <module>
    \trm -rf *.o *.oo bin/*""" % {'bench':'umpalumpa'}
ValueError: unsupported format character '_' (0x5f) at index 21

有什么想法吗?

注意:这是makefile的截断版本,没有评论。 注释[2]:'umpalumpa'是占位符,以确保它是一个字符串。有一天它会成为真实的东西。

编辑:我正在使用python 2.7

2 个答案:

答案 0 :(得分:6)

因为你已经得到了为什么不起作用的答案,一个更好的方法,并建议使用if format函数(如果你使用的是`Python 2.6+): -

"src/{bench}_serial.c".format(bench='umpalumpa')

所以,对于你的字符串,它变为: -

ake_content = """ PCC = pgcc 
{bench}_serial: src/main.c src/{bench}_serial.c ../common/util.c
\t$(PCC) $(ACCFLAGS) -o bin/{bench}_serial src/main.c src/{bench}_serial.c

clean:
\trm -rf *.o *.oo bin/*""".format(bench='umpalumpa')

答案 1 :(得分:4)

映射键后需要specify a conversion type

"%(bench)s_serial" % {'bench':'umpalumpa'}

请注意下划线前的s。此处的输出仍为"umpalumpa_serial"

转换类型始终是必需的,并始终位于%和任何可选组件之后。

格式化三引号字符串文字和单引号字符串文字之间没有区别。