更新:我已经提出了一个新问题,其中提供了完整的代码示例:将文件解密为流并将流读入pandas(hdf或stata)
我的基本问题是需要保持数据加密,并将其读入pandas。我可以接受各种解决方案,但加密需要使用AES256。目前,我正在使用PyCrypto,但这不是必需品。
我目前的解决方案是:
- 解密到临时文件(CSV、HDF等)
- 将临时文件读入pandas
- 删除临时文件
这远非理想,因为在硬盘上会有一个未加密的文件,如果用户出错可能会比临时文件更长时间存在。同样糟糕的是,IO基本上要增加三倍,因为先写出未加密文件,然后再将其读入pandas。
理想情况下,加密应该内置于HDF或其他二进制格式中,以便pandas可以读取,但据我所知似乎没有。
(注意:这是在linux系统上,因此也许有一个shell脚本解决方案,尽管如果所有操作都可以在python内完成,我可能更喜欢避免使用它。)
其次,而且仍然是一个很大的改进,就是将文件解密到内存中,并直接读入pandas,而不必创建新的(未加密的)文件。到目前为止,我还没有能够做到这一点。
以下是一些伪代码,希望能够说明问题。
# 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提到)的东西,因此我正在探索它们。感谢所有真诚尝试在这里帮助我的人。