Python:2.4格式字符串不起作用

时间:2013-06-04 15:19:46

标签: python

我原来的2.7代码在这里:

            myFile = open(prjFile, 'w+')
            myFile.write("""<VirtualHost 192.168.75.100:80>
    ServerName www.{hostName}
    ServerAlias {hostNameshort}.* www.{hostNameshort}.*
    DocumentRoot {prjDir}/html
    CustomLog \\|/usr/sbin/cronolog /var/log/httpd/class/{prjCode}/\{hostName}.log.%Y%m%d\" urchin"
</VirtualHost>""".format(hostName=hostName, hostNameshort=hostNameshort, prjDir=prjDir, prjCode=prjCode))
            myFile.close()

我试图通过这样做使其兼容:

myFile = open(prjFile, 'w+')
myFile.write("""<VirtualHost 192.168.75.100:80>
    ServerName www.%(hostName)s
    ServerAlias %(hostNameshort).* www.%(hostNameshort)s.*
    DocumentRoot %(prjDir)s/html
    CustomLog \\|/usr/sbin/cronolog /var/log/httpd/class/prjCode}/\%(hostName)s.log.%Y%m%d\" urchin"
</VirtualHost>""" % ('hostName', 'hostNameshort', 'prjDir', 'prjCode'))
myFile.close()

但我的错误是

Traceback (most recent call last):
  File "testfunction.py", line 20, in <module>
    </VirtualHost>""" % ('hostName', 'hostNameshort', 'prjDir', 'prjCode'))
TypeError: format requires a mapping

我在这里搜索了答案,我正在尝试的任何东西似乎都没有用。我在这里做错了什么?

3 个答案:

答案 0 :(得分:6)

错误告诉了所有内容,当您需要映射(tuple)时,您将__mod__传递给dict。例如你想要的东西:

print """<VirtualHost 192.168.75.100:80>
    ServerName www.%(hostName)s
    ServerAlias %(hostNameshort)s.* www.%(hostNameshort)s.*
    DocumentRoot %(prjDir)s/html
    CustomLog \\|/usr/sbin/cronolog /var/log/httpd/class/prjCode}/\%(hostName)s.log.%%Y%%m%%d\" urchin"
</VirtualHost>""" % dict(hostName='foo',hostNameshort='bar',prjDir='baz')

还有一些我需要做的事情。我需要在此行添加s

ServerAlias %(hostNameshort).* www.%(hostNameshort)s.*

我需要将最后一行的%翻倍,以逃避'%Y%m%d'中的百分号

答案 1 :(得分:1)

您可以从格式字符串中删除名称,例如%(hostNameshort)s%s,或者将这些数据作为字典提供。

答案 2 :(得分:0)

删除字符串的名称并将其替换为“%s”,然后将每个变量映射到它(必要时重复)。另外删除或更改部分

  

“登录。%Y%米%d \”

因为它也试图映射而且找不到相应的值