module: zipfile.writestr - line endings issue

Suresh Babu Kolla kollasb+news at gmail.com
Wed Aug 15 09:33:17 CEST 2007


Paul Carter wrote:
> On Aug 14, 1:32 pm, towers <damondo... at googlemail.com> wrote:
>> Thanks - your code works for me also.
>>
>> But I still get the issue when I read the file directly and add it to
>> the archive.
>>
>> Say if I:
>>
>> 1. Use the test.csv file created with your code - currently the line
>> endings look good (viewed in notepad on Win XP)
>> 2. Run the following code:
>>
>> # begin code
>> import zipfile
>> import os.path
>>
>> # Now, create the zipfile
>> dfile = open('test.csv', 'r')
>> zip_file = zipfile.ZipFile(r'C:\temp\ice\line endings\test.zip', 'w',
>> zipfile.ZIP_DEFLATED)
>> zip_file.writestr('test.csv',dfile.read())
>> dfile.close()
>> zip_file.close()
>>
>> 3. Then extract the file and the file endings have been corrupted. Now
>> one long line in notepad. (Other programs interpret correctly though.)
>>
>> Maybe the issue lies with this way (i.e. dfile.read()) of writing the
>> file to the archive...possibly.
>>
>> Damon
>>
> 
> Please don't top post.
> 
> The problem is with how you are opening the file. You need to open in
> binary mode if you wish to read your file unaltered. Also, file() is
> preferred over open() these days I think. Use:
> 
> dfile = file('test.csv', 'rb')

 From Python 2.5 library documentation.

<quote>
      When opening a file, it's preferable to use `open()' instead of
      invoking this constructor directly.  `file' is more suited to type
      testing (for example, writing `isinstance(f, file)').
</quote>

Python documentation seem to recommend using open(). I personally prefer
to use open, just because python open has same signature as POSIX open, 
even beginner programmers can understand the intent of the code clearly.

Kolla



More information about the Python-list mailing list