do replacement evenly

Mike Kazantsev mk.fraggod at gmail.com
Tue Jun 2 08:42:55 EDT 2009


On Tue, 2 Jun 2009 19:10:18 +0800
oyster <lepto.python at gmail.com> wrote:

> I have some strings, and I want to write them into a text files, one
> string one line
> but there is a requirement: every line has a max length of a certain
> number(for example, 10), so I have to replace extra SPACE*3 with
> SPACE*2, at the same time, I want to make the string looks good, so,
> for "I am123456line123456three"(to show the SPACE clearly, I type it
> with a number), the first time, I replace the first SPACE, and get "I
> am23456line123456three", then I must replace at the second SPACE
> block, so I get  "I am23456line23456three", and so on, if no SPACE*3
> is found, I have to aString.replace(SPACE*2, SPACE).
> I hope I have stated my case clear.
> 
> Then the question is, is there a nice solution?

Not so nice, but it should be faster than whole lot of string
manipulations, especially on longer lines:

  len_line = 55
  line = 'Thats  a whole line   of  some utter  nonsense ;)'

  words = line.split()
  count_space = len_line - len(''.join(words))
  count_span = len(words) - 1
  span_min = (count_space // count_span) * ' '
  count_span_max = count_space - (count_span * len(span_min))

  line = buffer(words[0])
  for word in words[1:]:
    if count_span_max:
      count_span_max -= 1
      line += span_min + ' '
    else: line += span_min
    line += word

  print '%d chars: %r'%(len(line), line)

-- 
Mike Kazantsev // fraggod.net
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 205 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/python-list/attachments/20090602/6c9bc9e3/attachment-0001.sig>


More information about the Python-list mailing list