Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Assign split values to multiple variables

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?

like image 566
MHibbin Avatar asked Nov 20 '12 10:11

MHibbin


5 Answers

You can assign to different variables. Like in Perl, you just need to define them in an array, so assignation is done by matching position of variable and result.

Here is something I tried in interactive 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"

I do like this rather than a dictionary or an array, especially when working in a for loop. It makes variable names more meaningful, even if local to the loop, or temporary.

Edit
second edit to integrate codeforester's notes (Thanks).

To avoid searching for variables usage, unwanted values can be dummied to clearly state it will not be used. Dummy variables are expected as _ by python linter

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

If you are not sure about the tokens quantity, use the extended iterable

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

If you don't need the List properties with your variables, you can just remove the square brackets (variables are then managed as a tuple).

End of edit

Readability for the win !

like image 89
Mat M Avatar answered Nov 14 '22 19:11

Mat M


This might be helpful for you:

strings = "python,splitting,the,string"

var1,var2,var3,var4 = [str(i) for i in strings.split(",")]
like image 21
Naret_17 Avatar answered Sep 24 '22 21:09

Naret_17


lst = foo.split("|")
lst[0]
lst[1]
...
like image 8
applicative_functor Avatar answered Nov 14 '22 19:11

applicative_functor


you can use a dictionary:

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'
like image 3
Ashwini Chaudhary Avatar answered Nov 14 '22 21:11

Ashwini Chaudhary


Use a list to store the tokens obtained: -

>>> my_str = "Python|Splitting|the|string"
>>> my_tokens = my_str.split("|")
>>>
>>> my_tokens
['Python', 'Splitting', 'the', 'string']
>>> my_token[0]
'Python'
like image 2
Rohit Jain Avatar answered Nov 14 '22 19:11

Rohit Jain