我有一个包含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()
答案 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
第一个是在一个项目列表中进行搜索,这个项目没有针对搜索进行优化,而后者正在搜索一个应该具有更好搜索性能的集合。