相关疑难解决方法(0)

泡椒还是json?

我需要将一个小dict对象保存到磁盘,其对象的类型str和值是ints ,然后恢复它.像这样的东西:

{'juanjo': 2, 'pedro':99, 'other': 333}
Run Code Online (Sandbox Code Playgroud)

什么是最好的选择,为什么?用pickle或用simplejson?序列化?

我使用的是Python 2.6.

python json pickle

107
推荐指数
7
解决办法
7万
查看次数

Python JSON解码性能

我正在使用jsonPython 2.6中的模块来加载和解码JSON文件.但是我目前的表现比预期慢.我正在使用一个6MB大小的测试用例,json.loads()需要20秒.

我以为该json模块有一些本机代码来加速解码?

如何检查是否正在使用?

作为比较,我下载并安装了python-cjson模块,并且cjson.decode()在相同的测试用例中花了1秒钟.

我宁愿使用Python 2.6提供的JSON模块,因此我的代码用户不需要安装其他模块.

(我正在Mac OS X上开发,但我在Windows XP上得到了类似的结果.)

python json python-2.6

45
推荐指数
4
解决办法
4万
查看次数

如何减少在python中加载pickle文件所花费的时间

我已经在python中创建了一个字典并将其转换为pickle.它的大小达到了300MB.现在,我想加载相同的泡菜.

output = open('myfile.pkl', 'rb')
mydict = pickle.load(output)
Run Code Online (Sandbox Code Playgroud)

加载这个泡菜大约需要15秒.我怎样才能减少这个时间?

硬件规格:Ubuntu 14.04,4GB RAM

下面的代码显示了使用json,pickle,cPickle转储或加载文件所需的时间.

转储后,文件大小约为300MB.

import json, pickle, cPickle
import os, timeit
import json

mydict= {all values to be added}

def dump_json():    
    output = open('myfile1.json', 'wb')
    json.dump(mydict, output)
    output.close()    

def dump_pickle():    
    output = open('myfile2.pkl', 'wb')
    pickle.dump(mydict, output,protocol=cPickle.HIGHEST_PROTOCOL)
    output.close()

def dump_cpickle():    
    output = open('myfile3.pkl', 'wb')
    cPickle.dump(mydict, output,protocol=cPickle.HIGHEST_PROTOCOL)
    output.close()

def load_json():
    output = open('myfile1.json', 'rb')
    mydict = json.load(output)
    output.close()

def load_pickle():
    output = open('myfile2.pkl', 'rb')
    mydict = pickle.load(output)
    output.close()

def …
Run Code Online (Sandbox Code Playgroud)

python performance pickle

30
推荐指数
3
解决办法
3万
查看次数

Python字典或JSON

将大型嵌套Python字典转换为JSON以便在小型库中使用(即不通过Web)有什么好处?

我正在解析配置文件并存储不同的数据位以便以后检索和输出.目前,所有信息都存储在嵌套的dict中,其中也有列表.这并不是说这个方法存在问题,我只是想知道使用标准数据格式是否有益,而嵌套的dict看起来很像JSON.

python json

11
推荐指数
1
解决办法
2万
查看次数

如何加快在 Python 中加载和读取 JSON 文件的过程?

我正在运行一个脚本(在多处理模式下),它从一堆 JSON 文件中提取一些参数,但目前它非常慢。这是脚本:

from __future__ import print_function, division
import os
from glob import glob
from os import getpid
from time import time
from sys import stdout
import resource
from multiprocessing import Pool
import subprocess
try:
    import simplejson as json
except ImportError:
    import json


path = '/data/data//*.A.1'
print("Running with PID: %d" % getpid())

def process_file(file):
    start = time()
    filename =file.split('/')[-1]
    print(file)
    with open('/data/data/A.1/%s_DI' %filename, 'w') as w:
        with open(file, 'r') as f:
            for n, line in enumerate(f):
                d = json.loads(line)
                try: …
Run Code Online (Sandbox Code Playgroud)

python json

9
推荐指数
2
解决办法
1万
查看次数

在Python中读取大量的json文件?

这不是关于读取大型JSON文件,而是以最有效的方式读取大量JSON文件.

我正在使用Million歌曲数据集中的last.fm数据.数据以一组JSON编码的文本文件的形式提供,其中的键是:track_id,artist,title,timestamp,similars和tags.

目前,我读他们到下列方式大熊猫经历几个选项,因为这是最快的,如图后在这里:

import os
import pandas as pd
try:
    import ujson as json
except ImportError:
    try:
        import simplejson as json
    except ImportError:
        import json


# Path to the dataset
path = "../lastfm_train/"

# Getting list of all json files in dataset
all_files = [os.path.join(root,file) for root, dirs, files in os.walk(path) for file in files if file.endswith('.json')] 

data_list=[json.load(open(file)) for file in all_files]
df = pd.DataFrame(data_list, columns=['similars', 'track_id'])
df.set_index('track_id', inplace=True)
Run Code Online (Sandbox Code Playgroud)

当前方法读取子集(在不到一秒的时间内完整数据集的1%).然而,读满车组的速度太慢,永远需要(我已经等了几个小时也一样)来读取,并已成为如所示进一步任务的瓶颈问题在这里. …

python json pandas

6
推荐指数
1
解决办法
979
查看次数

为什么使用“pickle”转储比“json”快得多?

这是针对 Python 3.6 的。

编辑并删除了很多无关紧要的内容。

我原以为json比 Stack Overflow 上的其他答案和评论更快pickle,看起来很多其他人也相信这一点。

我的测试合格吗?差距比我想象的要大得多。我在非常大的物体上测试得到了相同的结果。

import json
import pickle
import timeit

file_name = 'foo'
num_tests = 100000

obj = {1: 1}

command = 'pickle.dumps(obj)'
setup = 'from __main__ import pickle, obj'
result = timeit.timeit(command, setup=setup, number=num_tests)
print("pickle: %f seconds" % result)

command = 'json.dumps(obj)'
setup = 'from __main__ import json, obj'
result = timeit.timeit(command, setup=setup, number=num_tests)
print("json:   %f seconds" % result)
Run Code Online (Sandbox Code Playgroud)

和输出:

pickle: 0.054130 seconds
json:   0.467168 seconds
Run Code Online (Sandbox Code Playgroud)

python benchmarking json pickle

3
推荐指数
1
解决办法
6978
查看次数

标签 统计

python ×7

json ×6

pickle ×3

benchmarking ×1

pandas ×1

performance ×1

python-2.6 ×1