如何加速读取2个tsv文件并将它们编写为Python中的JSON文件

时间:2015-11-08 12:20:18

标签: python json twitter

我有一个包含13列的推文的tsv文件,每行代表一条推文(总共约300万条推文)。还有另一个包含3列的tsv文件,包括userinfo(~500Mb)。我需要读取这两个文件并将tweet文件的所有列和userinfo文件的第二列放在一起,并将它们保存为每个推文的JSON文件。我写了下面的代码,但它非常慢。我想知道是否有办法加快速度。

这是我的代码:

t_dic = {}
with open("~/userinfo_file.txt") as f:
    for line in f:
        data = line.split('\t')
        uid = data[0]
        user_info = data[1]
        user_info_dic = json.loads(user_info)
        t_dic[uid] = user_info_dic
f.close()


with open('~/tweets_file.txt') as f:
    for data in f:
        line = data.split('\t')
        user_dic = {}
        uid = line[0].strip()
        if uid in t_dic.keys(): # check whether the user is in my userinfo list
            user_dic['id'] = line[1].strip()
            user_dic['id_str'] = str(line[1].strip())
            user_dic['text'] = line[2].decode('utf-8').strip()
            user_dic['created_at'] = line[3].strip()
            user_dic['user'] = t_dic[uid] # here Im using the above dic which I created based on the userinfo file

            with io.open("~/tweet_dir/{}.json".format(user_dic['id']),'a') as f2:
                f2.write(unicode(json.dumps(user_dic)))
            f2.close()
f.close()  

2 个答案:

答案 0 :(得分:1)

您可以使用Python profilers get_current_user_id()cProfile来分析您的计划在每一行上花费的时间。
使用以下命令在脚本上运行profile

cProfile

答案 1 :(得分:0)

我能发现的唯一低效是:

if uid in t_dic.keys(): # check whether the user is in my userinfo list

请注意与

的区别
if uid in t_dic: # check whether the user is in my userinfo list

第一个是在一个项目列表中进行搜索,这个项目没有针对搜索进行优化,而后者正在搜索一个应该具有更好搜索性能的集合。