如何从不完整的字典中替换python中的字符串中的命名变量?

时间:2013-05-06 18:40:13

标签: python cgi heredoc

我有一个很长的html表单我正在从一个html文档中填充数据并通过电子邮件发送它。我正在使用form = cgi.FieldStorage()来获取从我的表单发布的数据,然后我有一个字符串用于消息体模拟器(但是变长超过)

 msg = """<html><p>%(Frist_Name)s</p><p>%(Last_Name)s</p></html> """ % form

根据debuging工作,直到找到我的一个名字vars没有提交表格。

表单上有许多可选字段,我可以做些什么来使这项工作或做类似的事情,所以我不必预先收集所有字段(即手动重新输入每个字段)并创建一个空白字段没有?或者是否有更简单的方法呢?

1 个答案:

答案 0 :(得分:2)

设置默认值

my_data_dict = {'first_name':'','last_name':'','blah':'','something_else':''} #defaults with all values from format string
my_data_dict.update(form) #replace any values we got
 msg = """<html><p>%(Frist_Name)s</p><p>%(Last_Name)s</p></html> """ % my_data_dict

或使用默认字典(这样你就不需要输入所有默认值,他们只会神奇地'')

from collections import defaultdict
my_dict = defaultdict(str)
print my_dict['some_key_that_doesnt_exist']  #should print empty string
my_dict.update(form)
msg = """<html><p>%(Frist_Name)s</p><p>%(Last_Name)s</p></html> """ % my_data_dict

或者abarnert指出你可以将其简化为

from collections import defaultdict
my_dict = defaultdict(str,form)
msg = """<html><p>%(Frist_Name)s</p><p>%(Last_Name)s</p></html> """ % my_dict

这是我刚在终端

中完成的一个完整示例
>>> d = defaultdict(str,{'fname':'bob','lname':'smith','zipcode':11111})
>>> format_str = "Name: %(fname)s  %(lname)s\nPhone: %(telephone)s\nZipcode: %(z
ipcode)s"
>>> d
defaultdict(<type 'str'>, {'lname': 'smith', 'zipcode': 11111, 'fname': 'bob'})
>>> #notice no telephone here
...
>>> d['extra_unneeded_argument'] =' just for show'
>>> d
defaultdict(<type 'str'>, {'lname': 'smith', 'extra_unneeded_argument': ' just f
or show', 'zipcode': 11111, 'fname': 'bob'})
>>> print format_str%d
Name: bob  smith
Phone:
Zipcode: 11111