如何以只读模式打开Pandas HDFStore的.h5文件防止误修改?
这个需求太合理了!毕竟从SQL拉取大DataFrame既费时间又给服务器添负担,本地缓存的文件可绝对不能不小心改坏了。下面给你几种可靠的只读打开方式,都是针对Pandas存储的.h5文件的:
直接用Pandas的
read_hdf指定只读模式
这是最省心的方法,毕竟你是用Pandas存的DataFrame,读取时只需要给mode参数传'r'就行——'r'就是标准的只读模式,任何尝试修改文件的操作都会直接报错,从源头杜绝误改:import pandas as pd # 替换成你的文件名和存储时用的key df = pd.read_hdf('your_cached_data.h5', key='my_dataframe', mode='r')要是你忘了存储时用的key,可以先不加key用
mode='r'打开,或者用下面的HDFStore方式查看所有键。另外,打开后如果不小心尝试修改DataFrame(比如加新列),会直接抛出ValueError,完全不用担心误操作。用
pd.HDFStore显式以只读模式操作文件
如果你需要查看文件里的所有存储内容,或者要读取多个DataFrame,用HDFStore对象更灵活,同样指定mode='r'就行:import pandas as pd # with语句会自动帮你关闭文件,避免资源泄漏 with pd.HDFStore('your_cached_data.h5', mode='r') as store: # 查看文件里所有的存储键 print("所有存储的键:", store.keys()) # 读取指定键的DataFrame df1 = store['dataframe_1'] df2 = store['dataframe_2']在这个
with上下文里,所有操作都是只读的,既不能修改已有数据,也不能往文件里新增内容,安全得很。底层用h5py强制只读(进阶场景)
如果你对HDF5格式比较熟悉,需要更底层的控制,也可以用h5py库直接打开文件,再转成Pandas DataFrame:import h5py import pandas as pd with h5py.File('your_cached_data.h5', 'r') as hf: # 根据你存储时的结构读取数据,这里假设键是'my_data' raw_data = hf['my_data'][:] df = pd.DataFrame(raw_data)这种方式适合需要直接操作HDF5数据集的场景,同样是完全只读的。
小提醒:如果你的.h5文件是用
pd.to_hdf存储的,记得读取时的key要和存储时一致,不然会找不到数据哦。只读模式下,文件会被锁定为不可修改状态,完美保护你的缓存数据。
内容的提问来源于stack exchange,提问作者cardamom

