Я написал небольшой криптографический модуль на питоне, задачей которого является зашифровать файл и поместить результат в tar-файл. Исходный файл для шифрования может быть довольно большим, но это не проблема, потому что моей программе нужно работать только с небольшим блоком данных за раз, который можно зашифровать на лету и сохранить.
Я ищу способ избежать этого в два прохода, сначала записывая все данные во временный файл, а затем вставляя результат в tar-файл.
В основном я делаю следующее (где генератор_шифровальщик — это простой генератор, который выдает куски данных, считанные из исходного файла). :
t = tarfile.open("target.tar", "w")
tmp = file('content', 'wb')
for chunk in generator_encryptor("sourcefile"):
tmp.write(chunks)
tmp.close()
t.add(content)
t.close()
Меня немного раздражает необходимость использовать временный файл, так как я файл, должно быть легко писать блоки непосредственно в файле tar, но собирать все куски в одну строку и использовать что-то вроде t.addfile('content', StringIO( bigcipheredstring) кажется исключенным, потому что я не могу гарантировать, что у меня достаточно памяти для старой bigcipheredstring.
Любой намек на то, как это сделать?