2012-11-20 104 views
3

我目前正在编写一个Python脚本来处理一些日志并重新格式化某些部分。部分脚本使用以下代码(作为示例):Python:将分割值分配给多个变量

var1,var2,var3=foo.split("|") 

哪一个可以正常工作。然而,这也许看起来并不那么好看(带走Python的可读性因素),如果有39个值,例如:

var1,var2,var3,...,var39=foo.split("|") 

是否有更好的方式来格式化这个结构呢?

感谢

+7

为什么你不使用'list'? –

+0

是否有一个特定的原因,你想将它们分配给单个变量? – Ifthikhan

回答

7
lst = foo.split("|") 
lst[0] 
lst[1] 
... 
2

使用list存储获得令牌: -

>>> my_str = "Python|Splitting|the|string" 
>>> my_tokens = my_str.split("|") 
>>> 
>>> my_tokens 
['Python', 'Splitting', 'the', 'string'] 
>>> my_token[0] 
'Python' 
3

你可以使用字典:

In [29]: strs="foo|bar|spam|eggs" 

In [31]: d=dict(("var{0}".format(i),x) for i,x in enumerate(strs.split("|"))) 

In [32]: d 
Out[32]: {'var0': 'foo', 'var1': 'bar', 'var2': 'spam', 'var3': 'eggs'} 

In [33]: d['var1'] 
Out[33]: 'bar' 

In [34]: d['var2'] 
Out[34]: 'spam' 
12

可以分配给不同的变量。和Perl一样,你只需要在数组中定义它们,所以通过匹配变量和结果的位置完成分配。

下面是我在交互式Python尝试:

>>> # this is a grep result, btw 
... foo = 'config/some.conf:12: title = "Super Me"' 
>>> [ filename, line, text ] = foo.split(':') 
>>> print text 
    title = "Super Me" 

我喜欢这样,而不是一本字典或数组,在for循环特别是工作时。它使得变量名称更有意义,即使是循环本地的,或者是临时的。

获胜的可读性!