使用 JSON 格式的数据读取 tar 文件时增加了记录

莱昂

20190528.tar.gz 文件有 144,390 个文件和 22,673,735 条记录。每个文件都有数千个 JSON 格式的数据。

单行中的一个原始记录 [我已经构造了这个以更好地理解]:

{
    "t_id":"80740185.1558980000000.120184.121164",
    "s_id":"80740185",
    "pt_slot":"null:null",
    "ch_id":1,"o_id":121164,"c_id":120184,
    "msg_type":1,
    "amd":"{
                \"msg\":\" some Bengali text\",
                \"mask\":\"1GB_OFFER\",
                \"ec\":\"1\",
                \"time-out\":\"0\",
                \"validity\":\"30052019 000000\"
           }",
    "time":1558960217731,
    "dlr":"1",
    "msisdn":"xxxxx",
    "entity":1
}

我正在阅读 tar.gz 文件并尝试制作管道分隔的 CSV 文件。

这是我的代码

#!/usr/bin/python
import json
import csv
import ast
import tarfile

def write_sms_dat_to_csv_file():
        tar= tarfile.open('20190528.tar.gz','r:gz')
        csv_writer = csv.writer(open('csv_data.txt','wb+'),delimiter = '|')
        for member in tar.getmembers():
                f = tar.extractfile(member)
                if f is not None:
                        data = []
                        for line in f.readlines():
                                print(line.strip())
                                data.append(json.loads(line.strip()))
                                for dt in data:
                                        csv_writer.writerow([dt['c_id'],dt['msisdn'],ast.literal_eval(dt['amd'])['mask'],ast.literal_eval(dt['amd'])['ec']])

if __name__=="__main__":
        write_sms_dat_to_csv_file()

上面的代码没有问题,工作正常。问题是它创建的 CSV 文件的记录比它应该多。我的意思是更多的记录。代码连输出记录都达3000万条也没整理好。我不得不杀了。

我的意思是输出记录号应该与输入记录号相同。

我没有在我的代码中找到记录被复制的错误。

你能帮忙找出逻辑错误吗?谢谢。

将要

问题出在data清单上。每次读取行时它都会保留内存,然后再次循环以执行 csv 写入。不太清楚为什么你需要data......

试试这个

if f is not None:
    for line in f.readlines():
        print(line.strip())
        dt = json.loads(line.strip())
        csv_writer.writerow([dt['c_id'], ..... 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用jQuery从JSON格式读取数据

来自分类Dev

使用C#读取静态存储在文本文件中的mulitiline JSON格式的数据

来自分类Dev

使用 fetch 读取 JSON 格式的文件

来自分类Dev

在多索引数据帧上使用groupby / apply时,索引级别增加了一倍

来自分类Dev

ckeditor 4在提交数据时增加了额外的间距

来自分类Dev

使用Python从JSON文件读取数据

来自分类Dev

使用Python从JSON文件读取数据

来自分类Dev

TAR文件格式问题

来自分类Dev

TAR文件格式问题

来自分类Dev

使用数组格式读取 JSON 文件的内容失败

来自分类Dev

熊猫读取json格式的数据

来自分类Dev

获取从包含JSON数据的文件中读取的Shell脚本中的格式化数据

来自分类Dev

json_decode无法读取以json格式存储的数据的文本文件

来自分类Dev

Json中的PHP转换文件又增加了一行

来自分类Dev

在Pyspark中读取tar.gz存档时使用特定模式过滤文件

来自分类Dev

使用python ftp tar文件

来自分类Dev

使用SwiftyJSON从JSON读取数据时获取Null作为回报

来自分类Dev

使用SwiftyJSON从JSON读取数据时获取Null作为回报

来自分类Dev

AngularJS:如何使用angular从json文件中读取数据

来自分类Dev

使用Promise从Angularjs中的JSON文件读取数据

来自分类Dev

如何使用dc.js从JSON文件读取数据?

来自分类Dev

使用JSON文件中的JS读取和计算数据

来自分类Dev

如何使用javascript读取包含数组数据的本地json文件?

来自分类Dev

使用angularjs读取Json数据

来自分类Dev

使用cURL读取JSON数据

来自分类Dev

使用Java读取JSON数据

来自分类Dev

使用angularjs读取Json数据

来自分类Dev

使用SwiftyJSON读取JSON数据

来自分类Dev

使用Hangfire,SQL Server日志文件增加了40GB

Related 相关文章

热门标签

归档