Как преобразовать текстовый файл в заданном диапазоне строк в json формат Python - PullRequest
0 голосов
/ 09 апреля 2020

Я рекомендую использовать для l oop для чтения файла, но я хочу только прочитать указанный c блок. Затем преобразовать в формат json.

Пример:

# Summary Report #######################
              System time | 2020-02-27 15:35:32 UTC (local TZ: UTC +0000)
# Instances ##################################################
  Port  Data Directory             Nice OOM Socket
  ===== ========================== ==== === ======
                                   0    0   
# Configuration File #########################################
              Config File | /etc/srv.cnf
[server]
server_id            = 1
port                                = 3016
tmpdir                              = /tmp
[client]
port                                = 3016
# management library ##################################
# The End ####################################################

текстовый файл

параметры захвата c блок:

[server]
server_id            = 1
port                                = 3016
tmpdir                              = /tmp

[client]
port                                = 3016

содержимое блока

в результате json:

{
   "server": {
          "server_id":"1",
          "port":"3016",
          "tmpdir":"/tmp"

   },
   "client": {
          "port": "3016"
   }
}

результат json

Есть ли встроенная функция для достижения этой цели?

Я пытался использовать следующее для разбора текстового файла. Но это не сработало.

import json

filename = 'conf.txt'

commands = {}
with open(filename) as fh:
    for line in fh:
        command, description = line.strip().split('=', 1)
        commands[command.rstrip()] = description.strip()

print(json.dumps(commands, indent=2, sort_keys=True))

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Прежде всего, никогда не публикуйте скриншоты, используйте редактор для ввода текста.

Вы должны редактировать на основе ваших требований, он делает некоторые предположения на основе вашего образца.

sample_input.txt

## SASADA
# RANDOM
XXXX
[server]
server_id = 1
port = 8000
[client]
port = 8001

code.py

all_lines = open('sample_input.txt', 'r').readlines() # reads all the lines from the text file

# skip lines, look for patterns here []
final_dict = {}

server = 0 # not yet found server
for line in all_lines:
   if '[server]' in line:
       final_dict['server'] = {}
       server = 1
   if '[client]' in line:
       final_dict['client'] = {}
       server = 2
   if server == 1:
       try:
          clean_line = line.strip() # get rid of empty space
          k = clean_line.split('=')[0] # get the key
          v = clean_line.split('=')[1]
          final_dict['server'][k] = v
       except:
          passs

   if server == 2:
       # add try except too
       clean_line = line.strip() # get rid of empty space
       k = clean_line.split('=')[0] # get the key
       v = clean_line.split('=')[1]
       final_dict['client'][k] = v
0 голосов
/ 09 апреля 2020

Вы можете прочитать все строки из file_handle следующим образом.

def read_lines(file_path, from_index, to_index):
    with open(file_path, 'r') as file_handle:
        return file_handle.readlines()[from_index:to_index]

Следующая часть обрабатывает выбранные строки в json

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...