10

I am currently writing a Python script to handle some logs and reformat certain parts. Part of the script makes use of the following code (as an example):

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

Which works fine. However this perhaps doesn't look so nice (taking away Python's readability factor) if there are 39 values, for example:

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

Is there are a better way to format this structure?

4

5 に答える 5

26

さまざまな変数に割り当てることができます。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特にループで作業する場合は、辞書や配列よりもこれが好きです。ループに対してローカルであっても、一時的であっても、変数名をより意味のあるものにします。

コードフォレスターのメモを統合するために2番目の編集を編集します(ありがとう)

変数の使用法を検索しないようにするために、不要な値をダミー化して、使用しないことを明確に示すことができます。_Pythonリンターのように、ダミー変数が期待されています

>>> [ _, line, text ] = foo.split(':')

トークンの数がわからない場合は、拡張反復可能オブジェクトを使用してください

>>> [ filename, line, text, *_ ] = foo.split(':')

変数に List プロパティが必要ない場合は、角かっこを削除するだけです (変数はタプルとして管理されます)。

編集終了

勝利のための可読性!

于 2013-08-12T00:28:20.297 に答える
8
lst = foo.split("|")
lst[0]
lst[1]
...
于 2012-11-20T11:00:58.680 に答える
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'
于 2012-11-20T11:02:23.007 に答える
2

a を使用しlistて取得したトークンを保存します: -

>>> my_str = "Python|Splitting|the|string"
>>> my_tokens = my_str.split("|")
>>>
>>> my_tokens
['Python', 'Splitting', 'the', 'string']
>>> my_token[0]
'Python'
于 2012-11-20T11:01:31.650 に答える
1

これはあなたに役立つかもしれません:

strings = "python,splitting,the,string"

var1,var2,var3,var4 = [str(i) for i in strings.split(",")]
于 2021-05-01T14:24:43.587 に答える