使用python将文本转换为json对象

时间:2019-03-16 08:33:06

标签: json python-3.x text

我是python的新手,我想将带有以下示例数据的文本文件转换为json格式, 这是一个示例数据:

  

用户

     

姓名:John

     

办公室:第一大街

     

出生日期:1978年1月1日

     

用户

     

名称:简

     

办公室:第二大街

     

生日:1970-01-01

我想创建一个如下的JSON对象:

  

[{“名称”:“约翰”,“办公室”:“ 1st Ave”,“出生日期”:“ 1978-01-01”},{“名称”:“简”,“办公室”:“ 2nd Ave“,” Birth date“:” 1970-01-01“}]

这只是示例数据,我想对非常大的数据进行处理,我该怎么做。

编辑:

尝试了这个:

details= ["Name","Office","Birth date"]

details_data = ["John", "1st Ave", "1978-01-01"]

data = dict(zip(details, details_data)

json.dump(data, file)

上面的代码工作正常,但是如何将完整的数据转换为json格式?

编辑2:

我现在面临的一个问题是,数据集有限,即它的工作行数为1000-2000行,但是当我尝试转换非常大的文件时,例如说20000-30000,那么它只能转换相同的前1000 -2000行。

关于它为什么发生以及如何解决的任何想法?

1 个答案:

答案 0 :(得分:0)

由于该文件的格式不是我所知道的标准格式,因此您将不得不对其进行迭代并自己制作行。

#!/usr/bin/env python3
import json

data = []
row_data = None
with open("example.txt") as example:
        for row in example:
                row = row.strip()
                if not row: # ignore newlines
                        continue

                if row == "User": # We have a new row and the last one is finished
                        if row_data:
                                data.append(row_data)
                        row_data = {}
                        continue

                key, value = row.split(": ")
                row_data[key] = value

data.append(row_data) # The last row is determined by the EOF not "User"

with open("example.json", "w") as jsonfile:
        json.dump(data, jsonfile)

with open("example.json") as jsonfile:
        print(json.load(jsonfile))

结果:

[{'Name': 'John', 'Office': '1st Ave', 'Birth date': '1978-01-01'}, {'Name': 'Jane', 'Office': '2nd Ave', 'Birth date': '1970-01-01'}]

正在发生的事情的解释:

创建一个新列表data,该列表将容纳我们的行。将row_data设置为None,稍后将在我们的检查中使用。.

我们剥去每一行(这可能不是必需的,但似乎没有什么坏处)。

如果该行是"",我们将跳过该行,以忽略所有这些多余的换行符。

如果该行是“用户”,则意味着我们要建立一个新行。这也意味着如果有一行,我们应该追加最后一行。您输入的示例文本将发生两次。我们初始化一个空字典。

对于其他每一行,我们只是分割“:”以获取键和值,我们将该键和值添加到row_data中,直到遇到另一条“用户”行。

我们遍历文件以获取最后一行后,再次执行此操作。由于我们没有“用户”检查可依赖于添加该行。

我们打开json并转储,就像您一直在做的一样。为了这个示例,我将其打开以将其打印出来。