Update: Я задал новый вопрос, который дает полный пример кода: Decrypting a file to a stream and reading the stream into pandas (hdf or stata)Чтение зашифрованных файлов в панд
Моя основная проблема заключается в том, что мне нужно, чтобы сохранить данные зашифрованы, а затем прочитать в панд. Я открыт для различных решений, но шифрование должно быть AES256. На данный момент я использую PyCrypto, но это не требование.
Мое текущее решение:
- Расшифровать во временный файл (CSV, HDF и т.д.)
- Прочитайте временный файл в панд
- Удалите временный файл
Это далеко не идеально, потому что на жестком диске есть незашифрованный файл, и с ошибкой пользователя он может быть длиннее временного. Столь же плохо, IO существенно утроился по мере того, как не зашифрованный файл выписывается, а затем считывается в панды.
В идеале шифрование будет встроено в HDF или какой-либо другой двоичный формат, который может читать pandas, но, похоже, это не так, насколько я могу судить.
. (Примечание: это на коробке Linux, так что, возможно, есть решение сценарий оболочки, хотя я бы, наверное, предпочел, чтобы избежать этого, если все это может быть сделано внутри питона)
Второй лучший, и все еще большое улучшение, заключалось бы в дешифровке файла в память и чтении непосредственно в пандах без создания нового (незашифрованного) файла. Пока что я не смог этого сделать.
Вот несколько псевдокодов, которые, надеюсь, иллюстрируют.
# this works, but less safe and IO intensive
decrypt_to_file('encrypted_csv', 'decrypted_csv') # outputs decrypted file to disk
pd.read_csv('decrypted_csv')
# this is what I want, but don't know how to make it work
# no decrypted file is ever created
pd.read_csv(decrypt_to_memory('encrypted_csv'))
Так вот что я пытаюсь сделать, но также заинтересованы в других альтернатив, которые выполняют ту же самую вещь (являются эффективными и не создают временный файл).
Обновление: Возможно, прямой ответ на этот вопрос не будет прямым ответом - не слишком удивительно, но я думал, что проверю. Я думаю, что ответ будет включать в себя что-то вроде BytesIO (упомянутое DSM) или mmap (упомянутое Mad Physicist), поэтому я изучаю их. Спасибо всем, кто искренне пытался помочь здесь.
Какая у вас проблема с решением «второе лучшее»? – zaph
Если вы используете pycrypto, вы должны записывать дешифрованные байты в файл. Не можете ли вы просто назначить эти байты переменной и передать ее в pandas? Я не понимаю, в чем проблема. –
@ArtjomB. Ну, это может быть проблема, но я не знаю, как это сделать. Вероятно, я удалю эту проблему очень скоро, поскольку, похоже, не существует какого-либо определенного для шифрования ответа, и в корне проблема может заключаться в том, что мне нужно направить вывод на переменную (память?), А не на файл, я знаю, как это сделать, но, возможно, можно выяснить ... – JohnE