Newbie problem

Angelo Secchi secchi at sssup.it
Thu Nov 27 06:35:41 EST 2003


Thanks Matt,
great suggestions.
angelo




On Thu, 27 Nov 2003 11:17:23 +0000
Matt Goodall <matt at pollenation.net> wrote:

> Angelo Secchi wrote:
> 
> >Hallo,
> >
> >I have the following problem. I'm trying to clean a database whose
> >lines look like:
> >
> >"2/G DM"        "HOE"   0       "R5D2"  1       0       0       0    
> > 
> >
> >in particular I need to remove the ".
> >
> >Here my code
> >
> >def wash(a) :
> >    a=string.replace(a,'"','')
> >    return a
> >
> >data=file("prova.txt",'r')
> >data_clean=file("prova_clean.txt",'w')
> >
> >temp_string = data.readline()
> >while len(temp_string) != 0:
> >    temp_field=string.split(temp_string,'\t')
> >    print temp_field
> >    temp_field=map(wash,temp_field)
> >    print temp_field
> >    data_clean.write(temp_field)
> >    temp_string = data.readline()
> >
> >data.close()
> >data_clean.close()
> >
> >Of course I receive an error in line "data_clean.write(temp_field)"
> >saying "TypeError: argument 1 must be string or read-only character
> >buffer, not list". I'm a newbie and reading tutorials around I was
> >not able to find the best solution to my problem. Could anybody help
> >me?
> >  
> >
> You presumably need to output the result with tab delimiters as in the
> source file so you need to do:
> 
>  >>> data_clean.write('\t'.join(temp_field))
> 
> I should point out that your code could be greatly simplified. You
> could write it something like this (untested):
> 
>  >>> data=file("prova.txt",'r')
>  >>> data_clean=file("prova_clean.txt",'w')
>  >>> for line in data:
>  >>>    line = '\t'.join([s.replace('"','') for s in
>  >line.split('\t')])>>    data_clean.write(line)
> 
> You may prefer to continnue using map() rather than a list 
> comprehension, that's up to you.
> 
> My final point (I promise!) is that this looks remarkably like a tab 
> delimited CSV file. Are you aware of the standard CSV module in Python
> 2.3? If you're using an older version of Python then there is also 
> Object Craft's CSV parser.
> 
> Hope this helps.
> 
> Cheers, Matt
> 
> -- 
> Matt Goodall, Pollenation Internet Ltd
> w: http://www.pollenation.net
> e: matt at pollenation.net
> t: +44 (0)113 2252500
> 
> 





More information about the Python-list mailing list