我目前正在编写一个 Python 脚本来处理一些日志并重新格式化某些部分。部分脚本使用以下代码(作为示例):
var1,var2,var3=foo.split("|")
哪个工作正常。但是,如果有 39 个值,这可能看起来不太好(去掉 Python 的可读性因素),例如:
var1,var2,var3,...,var39=foo.split("|")
有没有更好的方法来格式化这个结构?
我目前正在编写一个 Python 脚本来处理一些日志并重新格式化某些部分。部分脚本使用以下代码(作为示例):
var1,var2,var3=foo.split("|")
哪个工作正常。但是,如果有 39 个值,这可能看起来不太好(去掉 Python 的可读性因素),例如:
var1,var2,var3,...,var39=foo.split("|")
有没有更好的方法来格式化这个结构?
您可以分配给不同的变量。就像在 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
循环工作时。它使变量名更有意义,即使是循环本地的或临时的。
编辑
第二次编辑以整合 codeforester 的注释(谢谢)。
为避免搜索变量使用情况,可以对不需要的值进行虚拟化以明确声明不会使用它。虚拟变量是_
python linter所期望的
>>> [ _, line, text ] = foo.split(':')
如果您不确定令牌数量,请使用扩展的可迭代
>>> [ filename, line, text, *_ ] = foo.split(':')
如果您的变量不需要 List 属性,则只需删除方括号(然后将变量作为元组进行管理)。
编辑结束
可读性取胜!
lst = foo.split("|")
lst[0]
lst[1]
...
你可以使用字典:
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'
使用 alist
存储获得的令牌:-
>>> my_str = "Python|Splitting|the|string"
>>> my_tokens = my_str.split("|")
>>>
>>> my_tokens
['Python', 'Splitting', 'the', 'string']
>>> my_token[0]
'Python'
这可能对您有帮助:
strings = "python,splitting,the,string"
var1,var2,var3,var4 = [str(i) for i in strings.split(",")]