Output file formatting/loop problems -- HELP?

MRAB python at mrabarnett.plus.com
Tue Sep 8 18:35:56 CEST 2009


Maggie wrote:
> On Sep 8, 11:39 am, MRAB <pyt... at mrabarnett.plus.com> wrote:
>> Maggie wrote:
>>> My code is supposed to enumerate each line of file (1, 2, 3...) and
>>> write the new version into the output file --
>>> #!/usr/bin/python
>>> import os.path
>>> import csv
>>> import sys
>>> #name of output file
>>> filename = "OUTPUT.txt"
>>> #open the file
>>> test = open ("test.txt", "r")
>>> #read in all the data into a list
>>> readData = test.readlines()
>>> count = 0
>>> FILE = open(filename, "w")
>>> for item in readData:
>> Try adding:
>>       print repr(item)
>>
>> here to see what the lines actually look like. It might be a problem
>> with line endings.
>>
>>>    count = count + 1
>>>    tmp_string = str(count) + '     ' + item
>>>    print >> FILE, tmp_string
>>> else:
>>>    print 'The loop is finito'
>>> ---
>>> here is the sample file --
>>> 23
>>> 123
>>> 231
>>> 1231
>>> ---
>>> the output file i get looks like this:
>>> 1  23
>>> 123
>>> 231
>>> 1231
>>> --
>>> my question is why the enumeration starts and stops at first line and
>>> doesnt go through the entire file --
>>> (file is saved as .txt, so hypothetically no .rtf formatting that
>>> would screw up the output should be present)
>>> thanks for your help
>>
> 
> great tip, thanks so much -- now this is the output i get in the
> terminal...
> 
> '23\r123\r231\r1231'
> 
> why is it so? since the file is in .txt format - there should be no
> formatting involved?... how would i fix this?
> 
It shows that the line endings are carriage returns '\r'.

Line endings on Windows are '\r\n', on Unix/Linux are '\n' and on MacOS
are '\r', although recent versions of MacOS built on top of Unix.

The easiest solution would be to open the file in universal line-ending
mode:

     test = open ("test.txt", "rU")

This will translate any of the line endings.



More information about the Python-list mailing list