Ich stehe derzeit vor der Schwierigkeit, eine Textdatei mit mehreren Textzeilen zu erzeugen und sie mit Python 2.7 zu einer ZipFile im Speicher hinzuzufügen.ZipFile mit einer Liste von StringIO-Objekten generieren, CRC-Fehler beim Öffnen der ZipFIle
Der folgende Code ist in der Lage, ZIP-Datei mit 4 Textdatei zu generieren, jede Datei hat 1 Zeile von Wörtern.
Wenn ich den Code "temp [0] .write ('erste speicherinterne temporäre Datei')" in mehrere Zeilen ändern, hat die generierte ZIP-Datei einen CRC-Fehler.
Ich habe String Escape versucht, aber es ist fehlgeschlagen.
Darf ich wissen, was ich tun soll, um das Zipfile zu erstellen, das mit MultipleLine-fähiger Textdatei gefüllt ist?
Vielen Dank im Voraus.
# coding: utf-8
import StringIO
import zipfile
# This is where my zip will be written
buff = StringIO.StringIO()
# This is my zip file
zip_archive = zipfile.ZipFile(buff, mode='w')
temp = []
for i in range(4):
# One 'memory file' for each file
# I want in my zip archive
temp.append(StringIO.StringIO())
# Writing something to the files, to be able to
# distinguish them
temp[0].write('first in-memory temp file')
temp[1].write('second in-memory temp file')
temp[2].write('third in-memory temp file')
temp[3].write('fourth in-memory temp file')
for i in range(4):
# The zipfile module provide the 'writestr' method.
# First argument is the name you want for the file
# inside your zip, the second argument is the content
# of the file, in string format. StringIO provides
# you with the 'getvalue' method to give you the full
# content as a string
zip_archive.writestr('temp'+str(i)+'.txt',
temp[i].getvalue())
# Here you finish editing your zip. Now all the information is
# in your buff StringIO object
zip_archive.close()
# You can visualize the structure of the zip with this command
print zip_archive.printdir()
# You can also save the file to disk to check if the method works
with open('test.zip', 'w') as f:
f.write(buff.getvalue())