【问题标题】:Read file and convert to JSON读取文件并转换为 JSON
【发布时间】:2021-10-14 04:35:02
【问题描述】:

我有一个包含逗号分隔数据的文件,我希望最终输出为 json 数据。我在下面尝试过,但想知道有没有更好的方法来实现这个?

数据.txt

1,002, name, address
2,003, name_1, address_2
3,004, name_2, address_3

我想要如下的最终输出

{
"Id": "1",
"identifier": "002",
"mye": "name",
"add": "address"
}
{
"Id": "2",
"identifier": "003",
"mye": "name_2",
"add": "address_2"
}
and so on...

这是我正在尝试的代码

list = []

with open('data.txt') as reader:
     for line in reader:
         list.append(line.split(','))
          
print(list)

上面只是返回列表,但我需要转换上面定义的json键值对

【问题讨论】:

  • 您在转换部分尝试过什么?你用dict了吗?
  • 您知道json 模块吗?
  • @quamrana 你能分享几个例子吗?对 Python 非常陌生
  • 您的 .txt 实际上是一个 CSV 文件。所以问题在这里得到了回答stackoverflow.com/questions/19697846/…

标签: python json python-3.x


【解决方案1】:

您想要的结果实际上不是 JSON。这只是一系列 dict 结构。 我认为你想要的是一个字典列表。试试这个:

fields = ["Id", "identifier", "mye", "add"]
my_json = []

with open('data.txt') as reader:
     for line in reader:
         vals = line.rstrip().split(',')
         my_json.append({fields[vals.index(val)]: val for val in vals})
print(my_json)

【讨论】:

  • 谢谢,例如,我看到每行末尾都附加了 '\n' 如何在循环中删除?
  • 只需在line 和split(',') 之间添加一个rstrip()。答案已相应编辑。
【解决方案2】:

这样的事情应该可以工作:

import json

dataList = []

with open('data.txt') as reader:
    # split lines in a way that strips unnecessary whitespace and newlines
    for line in reader.read().replace(' ', '').split('\n'):
        lineData = line.split(',')
        dataList.append({
            "Id":           lineData[0],
            "identifier":   lineData[1],
            "mye":          lineData[2],
            "add":          lineData[3]
        })
out_json = json.dumps(dataList)
print(out_json)

请注意,您可以更改此行:

out_json = json.dumps(dataList)

到

out_json = json.dumps(dataList, indent=4)

并更改缩进值以格式化 json 输出。

如果您愿意,可以将其写入文件:

open("out.json", "w+").write(out_json)

【讨论】:

    【解决方案3】:

    对其中一项建议的扩展,但您可以考虑 zip 而不是列表理解

    import json
    my_json = []
    dict_header=["Id","identifier","mye","add"]
    with open('data.txt') as fh:
        for line in fh:
            my_json.append(dict ( zip ( dict_header, line.split('\n')[0].split(',')) ))
    
    out_file = open("test1.json", "w")
    json.dump(my_json, out_file, indent = 4, sort_keys = False)
    out_file.close()
    

    这当然假设您将 excel 中的文本保存到 excel 中的文本(制表符分隔)

    1   2   name    address
    2   3   name_1  address_2
    3   4   name_2  address_3
    

    【讨论】:

    • 见编辑@quamrana。这假设OP从excel中获取txt另存为.tab分隔`
    • 为什么要做出这样的假设?为什么不采用 OP 在“data.txt”中提供的内容?
    • OP 没有分享此信息,因此假设
    • OP 以何种方式不共享此信息?它从原始帖子中出现。
    【解决方案4】:

    我建议使用 pandas 库,它再简单不过了。

    import pandas as pd
    
    df = pd.read_csv("data.txt", header=None)
    
    df.columns = ["Id","identifier", "mye","add"]
    
    df.to_json("output.json")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-27
      • 2020-12-27
      • 2019-07-08
      • 1970-01-01
      相关资源
      最近更新 更多