Пока вы не пытаетесь поместить какие-либо данные Unicode в ваш StringIO
и вы осторожны, НЕ используйте cStringIO
, с вами все будет в порядке.
Согласно документации StringIO , при условии, что вы используете Unicode или 8 бит, все работает как положено. Предположительно, StringIO
делает что-то особенное, когда кто-то делает f.write(u"asdf")
(чего, насколько мне известно, ZipFile не делает). Во всяком случае,
import zipfile
import StringIO
s = StringIO.StringIO()
z = zipfile.ZipFile(s, "w")
z.write("test.txt")
z.close()
f = file("x.zip", "w")
f.write(s.getvalue())
s.close()
f.close()
работает так, как ожидалось, и нет разницы между файлом в результирующем архиве и исходным файлом.
Если вам известен конкретный случай, когда этот подход не работает, мне было бы очень интересно услышать об этом:)