Как читать из файла и помещать содержимое в метод json в Python? - PullRequest
0 голосов
/ 20 июня 2020

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

{"name": "Host1","type": "ipmask","subnet": ["0.0.0.0","255.255.255.255"],"dynamic_mapping": None},
{"name": "Host2","type": "ipmask","subnet": ["0.0.0.0","255.255.255.255"],"dynamic_mapping": None},

, в переменную в python, чтобы я мог использовать их в приведенном ниже коде для почтового запроса. используя JSON.

with open('data.txt', 'r') as file:
    dat2 = file.read()

post2 = {
        "id": 5,
        "method": "set",
        "params": [
            {
                "data": [
                     dat2
                    ],
                "url": "/config/url"
            },
        "session": sessionkey,
        "verbose": 1
        }

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

Ответы [ 3 ]

0 голосов
/ 20 июня 2020

Думаю, вы хотите отправлять запрос для каждой строки в data.txt? В этом случае простой l oop поможет прочитать строку, убрать из нее ',' и отправить запрос:

with open('data.txt', 'r') as file:
    for line in file.readlines():
    # strip whilespace with .strip() and then delete last character in a string (,)
    dat2 = line.strip()[:-1] 

    post2 = {
        "id": 5,
        "method": "set",
        "params": [
            {
                "data": [
                     dat2
                    ],
                "url": "/config/url"
            },
        "session": sessionkey,
        "verbose": 1
        }
0 голосов
/ 20 июня 2020

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

Две главные вещи - это, во-первых, строгие * У парсеров 1012 * будет проблема с None в файле данных - мне интересно, происходит ли там смешение JSON и строкового вывода структуры данных Python. Во-вторых, в структуре post2, которую вы показываете, отсутствует закрывающая квадратная скобка элемента 'params', поэтому она явно не работает как есть ...

Я бы посоветовал вам установите структуру post2 один раз, затем просто обновите содержимое массива data для каждой строки, например,

post = { ... }
data = post2["params"][0]["data"]

, затем l oop через файл, используя

with open(...) as file:
    for line in file:
      line = line.strip()[:-1] # strip while-space and the trailing comma
      # NB: here I'm assuming it's well-formed JSON, which it's not at the moment
      d = json.loads(line)
      data[0] = d
      # TODO - POST call here...
0 голосов
/ 20 июня 2020

На этот вопрос о переполнении стека есть много хороших ответов: Как прочитать файл построчно в список? . Вероятно, вы найдете тот, который работает.

...