【问题标题】:convert content of text file to json in python在python中将文本文件的内容转换为json
【发布时间】:2019-11-08 13:40:25
【问题描述】:

我是 python 的新手,我需要你的帮助/建议,我正在尝试使用 python 将文本文件的内容转换为 json

文件名是 json_content.txt。下面是文本文件的内容

hostname : WGNAIOP
fsystem : /dev/sdb
actual_size : 2.5T
used_disk : 609G
avail_disk : 1.7T
percentage : 26%
mount_disk : /data

hostname : WNQAIOP
fsystem : /dev/sdb
actual_size : 2.5T
used_disk : 526G
avail_disk : 1.8T
percentage : 23%
mount_disk : /data

我尝试了多种方式,但无法获得 json 格式的结果。 请帮助我知道如何将上述文本数据转换为 json

提前致谢!!!

【问题讨论】:

  • 数据是单行还是多行。即每个参数后用新行分隔?
  • 您的 JSON 文件应该是什么样子?
  • @prudhvi:数据在多行中,即 7 行。我已经逐行添加,但它只占用了一行
  • @anna,查找以下格式 { "hostname" : "WGNAIOP", "fsystem" : "/dev/sdb", "actual_size" : 2.5T, "used_disk" : "609G", “avail_disk”:“1.7T”,“百分比”:26% “mount_disk”:“/data”}

标签: python json python-3.x python-2.7


【解决方案1】:
json_data = {}
with open("json_content.txt","r") as fp:
    for line in fp.readlines():
        if line != "\n":
            split_data = line.split(':',)
            print(split_data)
            json_data[split_data[0]] = split_data[1].split('\n')[0]

print(json_data)

输出:

{'hostname': 'WGNAIOP', 'fsystem': '/dev/sdb', 'actual_size': '2.5T', 'used_disk': '609G', 'avail_disk': '1.7T', 'percentage': '26%', 'mount_disk': '/data'}

【讨论】:

  • 感谢支持我得到以下错误作为 Traceback(最近一次调用最后):文件“pytest2.py”,第 6 行,在 json_data[split_data[0]] = split_data[ 1].split('\n')[0] IndexError: 列表索引超出范围
  • 文本文件中的文本是否相同,请检查文件中是否有空行?
  • @Shrikant 检查更新的代码。如果您的文本文件中有空行。
  • 是的,删除后我的文件中有一个空行,它有效,非常感谢支持
  • 如果你也有空行,现在的代码也可以工作。
【解决方案2】:

除非您在键或值中有任何空格,否则您可以使用此正则表达式将您的内容转换为字典:

line = 'hostname : WGNAIOP fsystem : /dev/sdb actual_size : 2.5T used_disk : 609G avail_disk : 1.7T'
d_items = re.findall(r"(\S+\s:\s\S+)", line)

d = dict()
for d_item in d_items:
    k, v = d_item.split(" : ")
    d[k] = v

对于提供 sn-p 工作的行:

print(d)
# {'hostname': 'WGNAIOP', 'fsystem': '/dev/sdb', 'actual_size': '2.5T', 'used_disk': '609G', 'avail_disk': '1.7T'}

【讨论】:

  • ^\s*([^:]+)\s*:([^:]+)\s*$做实验不是更好吗?
【解决方案3】:

这是与其他答案类似的解决方案。

import re
import json

tfile='/home/json_content.txt' 
input = None
with open(tfile) as infile:
    input = infile.readline()

# remove leading and trailing double quotes if needed
# input = input.strip('"')
pattern = re.compile("\S* : \S*")
match = pattern.findall(input)

data = {}
for kvp in match:
    values = kvp.split(' : ')
    data[values[0]] = values[1]

data_json = json.dumps(data)
print(data_json)

【讨论】:

  • 我不想将字符串显式定义为 input = "",而是想从我在下面尝试过的特定路径中读取文件的内容,但它不起作用 tfile='/ home/json_content.txt' 以 open(tfile) 作为 infile:
  • 认为你已经走上了正轨。打开文件后只需要从文件中读取数据。看看更新的答案是否适合你。
猜你喜欢
  • 1970-01-01
  • 2020-11-01
  • 2020-06-12
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
  • 2018-02-14
相关资源
最近更新 更多