конвертировать содержимое текстового файла в JSON в Python - PullRequest
0 голосов
/ 08 ноября 2019

Я новичок в python. Мне нужна ваша помощь / предложение, я пытаюсь преобразовать содержимое текстового файла в json, используя python

имя файла - 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

Заранее спасибо !!!

Ответы [ 3 ]

1 голос
/ 08 ноября 2019
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'}
0 голосов
/ 08 ноября 2019

Вот решение, подобное другому ответу.

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)
0 голосов
/ 08 ноября 2019

Если у вас нет каких-либо пробелов ни в ключе, ни в значении, вы можете использовать это регулярное выражение для преобразования вашего контента в диктонарный:

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

Для строк при условии, что фрагмент работает:

print(d)
# {'hostname': 'WGNAIOP', 'fsystem': '/dev/sdb', 'actual_size': '2.5T', 'used_disk': '609G', 'avail_disk': '1.7T'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...