[Tutor] Where did those spaces come from?

Michael P. Reilly arcege at gmail.com
Tue Sep 13 14:46:05 CEST 2005


On 9/12/05, Tom Tucker <tktucker at gmail.com> wrote:
> 
> Tutor,
> 
> Good evening! The goal is to parse a simple file and grab column one. 
> Then print each value horizontally separated by a comma. 
> Why is Python adding a space padding between each value? Please see below. 
> 
> Thanks ahead of time.
> 
> 
> 
> 
> INPUT_FILE # unwanted lines removed
> ################################
> 5555 user at bdomain.com blah blah
> 1111 user at cdomain.com blah blah
> 3333 user at adomain.com blah blah
> 4444 user at edomain.com blah blah
> 
> 
> OUTPUT DESIRED
> ##################
> 5555,1111,3333,4444
> 
> 
> SCRIPT
> #########
> import re
> 
> input_file = open('/tmp/file','r')
> number_match = re.compile('^\d+\s+\w+\@')
> for line in input_file.readlines():
> if number_match.match(line):
> line = re.split('\s+', line)
> print line[0],
> print ",",
> 
> 
> OUTPUT GENERATED
> ####################
> 5555 , 1111 , 3333 , 4444 , 
> 
> 
To add to Danny's posting, I recently had to stream out an unknown list of 
values from a database, something like what you are doing. I created a class 
that formats the lines like you want and writes them out when the line gets 
close the the maximum length.

class Line:
 length = 72
 seperator = ', '
 def __init__(self):
 self.reset()
 def reset(self):
 self.contents = ''
 def __str__(self):
 return str(self.contents)
 def __len__(self):
 return len(self.contents)
 def __add__(self, other):
 o = str(other)
 l = len(o)
 s = len(self.seperator)
 if len(self) + l + s > self.length:
 self.flush()
 if self.contents:
 self.contents += self.seperator
 self.contents += str(other)
 return self
 def flush(self):
 if self.contents:
 self._print(self.contents)
 self.reset()
 def _print(self, line):
 print line

For your purposes, you would want to change the separator to just ','. Then 
you would just create an instance and add strings to it.
formatted_line = Line()
for line in input_file.readlines():
if number_match.match(line):
line = re.split(r'\s+', line)
formatted_line += line[0]
else:
formatted_line.flush() # clear anything left to print

HTH,
-Arcege
-- 
There's so many different worlds,
So many different suns.
And we have just one world,
But we live in different ones.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/tutor/attachments/20050913/c5679095/attachment.htm


More information about the Tutor mailing list