John Machin wrote:
> On Sep 29, 1:43 am, [EMAIL PROTECTED] wrote:
> > If I have a text file that is delimited by spaces, how do I import it
> > and get to comma delimited?  Here is a row of data from the text file:
> >
> > 1    1    10:55:14  2    65   8.5
> > 1.4+1.1                       2.5       Class-2   0
> >
> > I tried a few examples from the group and it didn't work, since the
> > file also has a header row and a row of seperators ( -------).  The
> > lengths of each row is something like 130, so there are extra spaces
> > after the last value as well.  I have tried joining and other things,
> > but I couldn't figure out how to get the values to come together.
> > Thanks.
> >
> > Kou
>
> It would help enormously if you could show us UNAMBIGUOUSLY what is in
> say the first 3 lines after the headings and separators -- do this:
>
> print repr(open("thefile", "rb").read()[:400])
>
> The other thing you need is to know enough about the file format to
> show us what is the CSV output that you require from the sample input
> -- we don't have crystal balls, and are likely to make half-donkeyed
> guesses, like these:
>
> If the spaces are really tabs, use line.split('\t')
>
> Otherwise: the file has fixed column widths, and any use of line.split
> will mangle it.
>
> The clumsy way to handle this is to count column positions, and write
> something ugly like:
> field1 = line[0:8]
> field2 = line[8:20]
> etc
>
> "a row of seperators ( -------)" sounds suspiciously like the "column
> aligned" format that can be produced by running a SQL query on a SQL
> Server database using MS's "Query Analyser". It looks like this:
>
> RecordType  ID1                  ID2         Description
> ----------- -------------------- ----------- ----------------------
> 1           12345678             123456      Widget
> 4           87654321             654321      Gizmoid
> etc
>
> Does your file look something like that? If so, then all you have to
> do is leverage off the fact that the second line has one-space gaps
> between each bunch of dashes, and you can write a little module that
> will read any file like that, just as though it were a CSV file.

If the fields are separated by whitespace, this Awk program can
handle the situation:

awk 'BEGIN{OFS=","} {$1=$1} 1' oldfile >newfile

If the fields are fixed-width and the 2nd line is a guide to those
widths,
then this Ruby program should work (not optimized for speed):

lines = IO.readlines( 'data2' )
# Dump header.
lines.shift
# Save column guide.
guide = lines.shift.scan( /-+ */ )
for line in lines do
  puts guide.map{|s| line.slice!(0,s.size).strip}.join(",")
end

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to