Python 导入dict与解析文本文件
我有一个应用程序以键值格式将数据保存在磁盘上。文件可能会变得相当大。我想让我的python脚本读入这些数据,我想知道-如果我将这些数据格式化为有效的python dictPython 导入dict与解析文本文件,python,dictionary,Python,Dictionary,我有一个应用程序以键值格式将数据保存在磁盘上。文件可能会变得相当大。我想让我的python脚本读入这些数据,我想知道-如果我将这些数据格式化为有效的python dict{key1:value1,key2:value2…},然后导入该文件以使用它,与读入文本文件相比,这是否会带来显著的性能改进,将其拆分为key:value对并存储到dict中 感谢是存储类似dict的数据的标准方法,并且存在非常快速的读/写JSON数据的实现,例如python中的实现。尝试: 如果您可以降低文件格式的可读性,还可
{key1:value1,key2:value2…}
,然后导入该文件以使用它,与读入文本文件相比,这是否会带来显著的性能改进,将其拆分为key:value
对并存储到dict中
感谢是存储类似dict的数据的标准方法,并且存在非常快速的读/写JSON数据的实现,例如python中的实现。尝试:
如果您可以降低文件格式的可读性,还可以尝试使用(二进制JSON编码)。是存储类似dict的数据的标准方法,并且存在非常快速的读取/写入JSON数据的实现,例如python中的实现。尝试:
如果您可以降低文件格式的可读性,还可以尝试使用(二进制JSON编码)。在我的示例中,我假设,
dct
保存了我们要加载的字典
从repr(dct)
将值以repr(dct)
创建的字符串形式保存到文件中是一个选项
可通过以下方式加载此文件:
import ast
def fromdct(fname):
with open(fname) as f:
return ast.literal_eval(f.read())
从JSON文件加载dict
通过导入Python模块加载数据
假设data.py具有以下内容:
data = {"a": 11, "b": 22, ...large dictionary}
您可以通过以下方式读取数据:
from data import data
性能(从模块导入最快)
为了进行测试,我创建了一个包含一百万个键值对的字典:
>>> dct = {"a" + str(i): for i in range(1000000)}
序列化(此处跳过)
以及将数据输入变量所需的测量时间:
>>> %timeit fromdct("data.dct")
1 loops, best of 3: 5.21 s per loop
>>> %timeit fromjson("data.json")
1 loops, best of 3: 773 ms per loop
>>> %timeit from data import data
1 loops, best of 3: 2.15 µs per loop
正如我们所看到的,从Python模块加载数据确实是最快的
可能的优化
- 使用simpler
library可以更快json
- 将文件保存到gzip文件中-这可能会加快从磁盘读取的速度(不适用于从Python模块导入)
- 能够一个接一个地读取值,无需一次性加载到内存中
- 能够在程序的多个实例之间共享数据
- 若要在另一台服务器上运行Redis并通过TCP进行通信,则需要使用另一台计算机的内存
- Redis将数据持久化到磁盘
- 能够逐个键更改数据
- 必须安装Redis
- 所有数据都在内存中(可以通过分区到多个实例来解析)
- 在某些情况下(突然终止服务器),您可能会丢失配置中的最新更改
- 从Python模块加载是最快的方法
- 从JSON加载效果很好
- 通过ats加载。文字评估非常缓慢
- 如果数据量较大,并且同时在多个程序中需要数据,那么使用Redis可能是一种解决方案
dct
保存我们要加载的字典
从repr(dct)
将值以repr(dct)
创建的字符串形式保存到文件中是一个选项
可通过以下方式加载此文件:
import ast
def fromdct(fname):
with open(fname) as f:
return ast.literal_eval(f.read())
从JSON文件加载dict
通过导入Python模块加载数据
假设data.py具有以下内容:
data = {"a": 11, "b": 22, ...large dictionary}
您可以通过以下方式读取数据:
from data import data
性能(从模块导入最快)
为了进行测试,我创建了一个包含一百万个键值对的字典:
>>> dct = {"a" + str(i): for i in range(1000000)}
序列化(此处跳过)
以及将数据输入变量所需的测量时间:
>>> %timeit fromdct("data.dct")
1 loops, best of 3: 5.21 s per loop
>>> %timeit fromjson("data.json")
1 loops, best of 3: 773 ms per loop
>>> %timeit from data import data
1 loops, best of 3: 2.15 µs per loop
正如我们所看到的,从Python模块加载数据确实是最快的
可能的优化
- 使用simpler
library可以更快json
- 将文件保存到gzip文件中-这可能会加快从磁盘读取的速度(不适用于从Python模块导入)
- 能够一个接一个地读取值,无需一次性加载到内存中
- 能够在程序的多个实例之间共享数据
- 若要在另一台服务器上运行Redis并通过TCP进行通信,则需要使用另一台计算机的内存
- Redis将数据持久化到磁盘
- 能够逐个键更改数据
- 必须安装Redis
- 所有数据都在内存中(可以通过分区到多个实例来解析)
- 在某些情况下(突然终止服务器),您可能会丢失配置中的最新更改
- 从Python模块加载是最快的方法
- 从JSON加载效果很好
- 通过ats加载。文字评估非常缓慢
- 如果数据量较大,并且同时在多个程序中需要数据,那么使用Redis可能是一种解决方案