splitting tables

robsom no.mail at no.mail.it
Sun Feb 8 17:58:25 CET 2004


Il Sat, 07 Feb 2004 21:56:23 +0000, Bengt Richter ha scritto:


>  >>> s = """\
>  ... CGA 1990 08 15 13 16 G500-105 D   524.45 J.. R1 1993 01 29 00 00 900069
>  ... CGA 1990 08 16 01 22          D   508.06 J.. R1 1993 01 27 00 00 900065
>  ... """
>  >>> import re
>  >>> rxo = re.compile(
>  ...     '(...) (....) (..) (..) (..) (..) (........) (.)   '
>  ...     '(......) (...) (..) (....) (..) (..) (..) (..) (......)'
>  ... )
>  >>> import csv
>  >>> import sys
>  >>> writer = csv.writer(sys.stdout)
>  >>> for line in s.splitlines():Apparently my system doesn't have a 
>  >>> writer.writerow(*rxo.findall(line))
>  ...
>  CGA,1990,08,15,13,16,G500-105,D,524.45,J..,R1,1993,01,29,00,00,900069
>  CGA,1990,08,16,01,22,        ,D,508.06,J..,R1,1993,01,27,00,00,900065
> 
> To write the csv lines to a file instead of sys.stdout, substitute
> (untested) file('your_csv_output_file.csv') in place of sys.stdout in
> the above, and get your lines from something like (note chopping off the
> trailing newline)
> 
>     for line in file('your_table_file'):
>         line = line.rstrip('\n')
> 
> instead of
> 
>     for line in s.splitlines()
> 
> If you have possible short lines that create no match, you'll need to
> check for those before unpacking (by using the prefixed *) into
> writer.writerow's arg list.

I'm not sure I completely understand what you are suggesting. Use a sort
of "mask" to extract information from the line and put it into a string?
And the use some function of the csv module (which I don't have) to
manipulate this string and output it?
If I got it correct this would work only if all the elements of the
columns have the same number of characters which is not always the case as
I was saying in my reply to Karl Pflästerer above.
Any other idea? Thanks

R





More information about the Python-list mailing list