Reputation: 9917
I'm looking for a more elegant way to format a string into a human readable syntax.
>>> a = 'ABCDEFGHIJKLMNOPQRSTUVWX'
>>> # magic
>>> print(a)
'ABCD-EFGH-IJKL-MNOP-QRST-UVWX'
What I got so far:
>>> a = 'ABCDEFGHIJKLMNOPQRSTUVWX'
>>> b = map(''.join, zip(*[iter(a)]*4))
>>> print(b)
['ABCD', 'EFGH', 'IJKL', 'MNOP', 'QRST', 'UVWX']
>>> c = '-'.join(b)
>>> print(c)
'ABCD-EFGH-IJKL-MNOP-QRST-UVWX'
Upvotes: 0
Views: 218
Reputation: 56674
from itertools import izip_longest
def grouper(iterable, n, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
def make_elegant(s, groupsize=4, joiner='-', pad=''):
return joiner.join(''.join(block) for block in grouper(s, groupsize, pad))
print make_elegant('ABCDEFGHIJKLMNOPQRSTUVWX')
returns
ABCD-EFGH-IJKL-MNOP-QRST-UVWX
Upvotes: 2
Reputation: 26582
You can do it in one line with this:
>>> a = 'ABCDEFGHIJKLMNOPQRSTUVWX'
>>> "-".join([a[i:i+4] for i in range(len(a)/4)])
'ABCD-BCDE-CDEF-DEFG-EFGH-FGHI'
In python 3 use: "-".join([a[i:i+4] for i in range(int(len(a)/4))])
Upvotes: 3