我找到了希望得到的答案here。
就我而言,我有2个字符串列表。从此代码:
fields = POST[ 'fields' ]
values = POST[ 'row' ]
for ( field, value ) in zip( fields, values ):
f.write( f' field {field}, value {value}\n' )
...这就是我得到的:
row: [4,1,"AAR",null,null,"Aardvark Ltd",null,"2019-07-20 00:00:00","modem - ring first","M",null,null,"",null,null]
fields: ["id","category","code","title","firstname","secondname","salutation","lastcon","sendconventions","stdsendmethod","vatno","refquote","notes","created","lastmodif"]
field [, value [
field ", value 4
field i, value ,
field d, value 1
field ", value ,
field ,, value "
field ", value A
field c, value A
field a, value R
field t, value "
...
它将字符串分成字符,甚至包括方括号,引号和逗号。我该如何预防?我希望它在迭代时列出成对的字符串(每个列表中有1对)。
答案 0 :(得分:0)
我假设您正在从http请求正文中获取这些字段和值。
在这种情况下,您可以使用literal_eval
https://docs.python.org/3/library/ast.html#ast.literal_eval将数据转换为实际的python列表并对其进行迭代。
在您的情况下:
from ast import literal_eval
fields = literal_eval(POST['fields'])
values = literal_eval(POST['row'])
,然后尝试遍历它们。
答案 1 :(得分:0)
@mike: 您是否检查过以确保它们确实是列表中的第一名?您可以使用以下命令来做到这一点:
print(type(fields))
print(type(values))
使用zip遍历两个列表的一般方法以及您的操作方式确实是正确的。但是,我认为您正在处理请求包中的对象,而不是列表。
答案 2 :(得分:0)
根据您的输出,字段和值是str
,而不是list
。一种解决方案可能涉及使用python的list
将值转换为ast.literal_eval
。
from ast import literal_eval
fields = literal_eval(POST['fields'])
values = literal_eval(POST['row'])
for field, value in zip(fields, values):
f.write(f' field {field}, value {value}\n')
有关ast.literal_eval
的更多信息,请参见here。