更新:我提出了一个新问题,提供完整的代码示例:Decrypting a file to a stream and reading the stream into pandas (hdf or stata)
我的基本问题是我需要保持数据加密然后读入大熊猫。我对各种解决方案持开放态度,但加密需要是AES256。截至目前,我正在使用PyCrypto,但这不是必需的。
我目前的解决方案是:
这远非理想,因为硬盘上暂时存在未加密的文件,并且由于用户错误,它可能比临时更长。同样糟糕的是,当写出未加密的文件然后读入大熊猫时,IO基本上是三倍。
理想情况下,加密会内置到HDF或其他一些大熊猫可以读取的二进制格式中,但它似乎并不像我所说的那样。
(注意:这是在linux盒子上,所以也许有一个shell脚本解决方案,虽然我可能更愿意避免这种情况,如果它可以在python内部完成。)
第二个最好的,也是一个很大的改进,就是将文件解密到内存中并直接读入大熊猫,而无需创建新的(未加密的)文件。到目前为止,我还没能做到这一点。
这是一些有希望说明的伪代码。
# 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提及),所以我正在探索这些。感谢所有在这里真诚帮助的人。
答案 0 :(得分:2)
如果您已经在使用Linux,并且寻找“简单”替代方案,而不涉及在Python级别加密\ decrypting,则可以使用native file system encryption with ext4。
这种方法可能会使您的安装变得复杂,但它具有以下优点:
缺点:
至于将解密文件写入内存,您可以使用/dev/shm
作为写入位置,从而节省了复杂流式传输或覆盖pandas方法的需要。
简而言之,/dev/shm
使用内存(在某些情况下,您的tmpfs
也会这样做),并且比普通硬盘驱动器快得多(info /dev/shm/)。
我希望这会对你有所帮助。