I retrieved data from a sql query by using
bounds = cursor.fetchone()
And I get a tuple like:
(34.2424, -64.2344, 76.3534, 45.2344)
And I would like to have a string like 34.2424 -64.2344 76.3534 45.2344
Does a function exist that can do that?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Use str.join():
>>> mystring = ' '.join(map(str, (34.2424, -64.2344, 76.3534, 45.2344))) >>> print mystring 34.2424 -64.2344 76.3534 45.2344
You’ll have to use map here (which converts all the items in the tuple to strings) because otherwise you will get a TypeError.
A bit of clarification on the map() function:
map(str, (34.2424, -64.2344, 76.3534, 45.2344) is equivalent to [str(i) for i in (34.2424, -64.2344, 76.3534, 45.2344)].
It’s a tiny bit faster than using a list comprehension:
$ python -m timeit "map(str, (34.2424, -64.2344, 76.3534, 45.2344))" 1000000 loops, best of 3: 1.93 usec per loop $ python -m timeit "[str(i) for i in (34.2424, -64.2344, 76.3534, 45.2344)]" 100000 loops, best of 3: 2.02 usec per loop
As shown in the comments to this answer, str.join() can take a generator instead of a list. Normally, this would be faster, but in this case, it is slower.
If I were to do:
' '.join(itertools.imap(str, (34.2424, -64.2344, 76.3534, 45.2344)))
It would be slower than using map(). The difference is that imap() returns a generator, while map() returns a list (in python 3 it returns a generator)
If I were to do:
''.join(str(i) for i in (34.2424, -64.2344, 76.3534, 45.2344))
It would be slower than putting brackets around the list comprehension, because of reasons explained here.
In your (OP’s) case, either option does not really matter, as performance doesn’t seem like a huge deal here. But if you are ever dealing with large tuples of floats/integers, then now you know what to use for maximum efficiency :).
Method 2
You can also use str.format() to produce any arbitrary formatting if you’re willing to use * magic. To handle the specific case of this question, with a single separator, is actually a little cumbersome:
>>> bounds = (34.2424, -64.2344, 76.3534, 45.2344)
>>> "{} {} {} {}".format(*bounds)
34.2424 -64.2344 76.3534 45.2344
A more robust version that handles any length, like join, is:
>>> len(bounds)*"{} ".format(*bounds)
But the value added is that if you want to extend your formatting to something more involved you’ve got the option:
>>> "{} --> | {:>10} | {:>10} | {:>10} |".format(*bounds)
34.2424 --> | -64.2344 | 76.3534 | 45.2344 |
From here, your string formatting options are very diverse.
Method 3
If I’ve got your message, you are getting tuple of floats, am I right?
If so, the following code should work:
In [1]: t = (34.2424 , -64.2344 , 76.3534 , 45.2344) In [2]: ' '.join([str(x) for x in t]) Out[2]: '34.2424 -64.2344 76.3534 45.2344'
We’re converting every value in tuple to string here, because str.join method can work only with lists of string.
If t is a tuple of strings the code will be just ' '.join(t).
In case you’re getting string in format "(34.2424 , -64.2344 , 76.3534 , 45.2344)", you should firstly get rid of unnescessary parthensis and commas:
In [3]: t = "(34.2424 , -64.2344 , 76.3534 , 45.2344)"
In [4]: t.strip('()')
Out[4]: '34.2424 , -64.2344 , 76.3534 , 45.2344'
In [5]: numbers = t.strip('()')
In [6]: numbers.split(' , ')
Out[6]: ['34.2424', '-64.2344', '76.3534', '45.2344']
In [7]: ' '.join(numbers.split(' , '))
Out[7]: '34.2424 -64.2344 76.3534 45.2344'
Method 4
Try this
>>> a = (34.2424, -64.2344, 76.3534, 45.2344) >>> ' '.join(str(i) for i in a) '34.2424 -64.2344 76.3534 45.2344
Method 5
rows = cursor.fetchall()
for row in rows:#iterate over entire rows
print('row : 'row)#prints the entire row
for d in row:#prints each item of the row
print(d)
Output:
row : (34.2424, -64.2344, 76.3534, 45.2344) 34.2424 -64.2344 76.3534 45.2344
Method 6
You could simply use the following code:
i = 0
for row in data:
print(row[i])
i++
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0