В Python, как записать обратно текстовый файл stringIO в zip-архив, а затем вернуться в поле bytea в PostgreSQL? - PullRequest
2 голосов
/ 12 июля 2011

Относительно noob к Python, я успешно извлек текстовый файл из zip-архива, содержащегося в поле bytea PostgreSQL, используя этот код:

myzip = ZipFile(StringIO(rv[0]["archivefield"]), 'a')
data = myzip.read("content.txt",'a')

# *** WORK ON content.txt HAPPENS HERE ***

Затем я сделалМне нужно работать над этим текстовым файлом ... Пока все хорошо!

Теперь, хотя я немного запутался в синтаксисе, чтобы вернуть content.txt обратно в нужное место в архиве, а затем записатьвернуться к «архивному полю».

Может ли кто-нибудь из вас, экспертов здесь, предложить немного синтаксиса, который мне понадобится?Почти здесь!

Что ж, спасибо за помощь, полученную здесь - теперь мы непременно переписываемся с 'archivefield' - это здорово!

В настоящее время возникают следующие проблемы:

1) Я, видимо, удваиваю размер исходного поля.Является ли это функцией режима добавления?Как «свернуть в ноль и переписать над полем?- и / или -

2) данные, которые я записываю, не кодируются обратно в шестнадцатеричный (?) режим, как казалось исходным данным - и будут стандартными для v9 в PostgreSQL.- ИЛИ -

Проблема в том, что данные больше не архивируются, и, следовательно, их большой размер?

1 Ответ

0 голосов
/ 12 июля 2011

Используйте ZipFile.writestr:

strf = StringIO(rv[0]["archivefield"])
zipf = ZipFile(strf, "a")
data = myzip.read("content.txt"')

# process data, changing its value

zipf.writestr("content.txt", data)
zipf.close()  # actually write contents out

, затем запишите str.getvalue() обратно в базу данных PostgreSQL, переписав предыдущее значение на rv[0]["archivefield"].Боюсь, я не могу тебе помочь.

...