Получение переменных из внешнего файла .json Python

С чем мне нужна помощь

Я хочу получать переменные из внешнего файла .json в локальном каталоге с использованием python27

(импорт не работает)

Я хочу сохранить переменные в .json, как показано ниже

value1 = "this_is_value1"
value2 = "this_is_value2"
value3 = "this_is_value3"

и использовать их в сценарии.

Если я смогу добраться до точки, в которой .json включает

value1 = "this_is_value1"

и мой .py включает

print(value1)

с выходом

>>>this_is_value1

Я могу взять это оттуда

Моя конечная задача

Идея состоит в том, что мне нужно изменить определенные части другого файла .yaml, эта программа должна принимать такие переменные, как (ID, System_id, IP), и в этом случае мне нужен .json, я могу изменить, который скрипт python27 затем извлекает информацию from, чтобы изменить файл .yaml.

Я отлично справился с этой частью, просто нужно сделать эту часть

Я изучил проблему?

Короче ДА.

однако в тезисах используются файлы .py или другие типы файлов.

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

Другие ответчики просто не предоставляют информации о том, как они решили проблему.

Зачем они вам как переменные? dict недостаточно хорош?

Norrius 09.03.2018 16:26

Взгляните на модуль configparser, чтобы узнать о безопасном и простом способе хранения таких конфигураций.

match 09.03.2018 16:26

Либо inifile, либо файл в формате json, загруженный в dict, должен решить вашу проблему.

Adonis 09.03.2018 16:28

«... эти ответы используют .py или другие типы файлов» - но методы работают? Тогда обманывайте. Переименуйте файл .txt в .py, импортируйте, переименуйте обратно.

Jongware 09.03.2018 16:28

Или вы можете использовать pickle, pickle.dump и pickle.load

Mathieu 09.03.2018 16:29

@match Я новичок в python, но, глядя на inifile, он выглядит многообещающим. Есть ли хорошая ссылка?

Teobot 09.03.2018 16:29

@ usr2564301 не могли бы вы объяснить дальше?

Teobot 09.03.2018 16:30

Здесь есть хорошее объяснение configparser: pymotw.com/3/configparser

match 09.03.2018 16:31

@Adonis Я попытался отформатировать его в формат json, но что-то пошло не так, не могли бы вы описать, как это можно сделать?

Teobot 09.03.2018 16:31

Вы сказали, что нашли рабочие решения для файлов с расширением .py. Так что переименуйте файл, пусть даже временно. Я не знаю, какие решения вы нашли, поэтому не могу дать дополнительных советов, кроме этого.

Jongware 09.03.2018 16:33

переименовывать файл действительно не нужно, когда уже есть много вариантов для чтения. Можно также установить переменные среды в bash и извлечь из os.environ

avigil 09.03.2018 16:35

@ usr2564301 Я нашел возможное решение с сохранением моей переменной в .py, но я не мог импортировать ее, поскольку она была локальной рядом с моим скриптом.

Teobot 09.03.2018 16:47
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
12
4 993
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Обычно мне нравится управлять этим процессом с помощью метода или функции. Вот фрагмент кода, который я часто использую, чтобы прочитать формат текстового файла, который вы показали:

class MainApp(object):

    def __init__(self, config_file):
        # Initialization stuff from a configuration file.
        self.readConfigFile(config_file)

    def readConfigFile(self, file):
        try:
            with open(file, 'r') as cfg:
                lines = list(cfg)
            print("Read", len(lines), "lines from file", file)
            # Set configured attributes in the application
            for line in lines:
                key, value = line.split('=')
                setattr(self, key.strip(), value.strip())
        except:
            print('Configuration file read error')
            raise

if __name__ == '__main__':
    # Create an instance of the application.
    # It will read the configuration file provided here.
    app = MainApp('myconfig.txt')
    # Now you can access the attributes of the class (read from config file)
    print(app.value1, app.value2, app.value3)

Я немного запутался в том, что это делает, не могли бы вы объяснить немного больше :)

Teobot 09.03.2018 16:36

Я обновил ответ примером варианта использования. Это полезно, потому что приложение содержит все настроенные параметры как атрибуты класса.

Ron Norris 09.03.2018 17:05
Ответ принят как подходящий

Для файла в формате json (скажем, "my_file.json"), например:

{
  "x": "this is x",
  "y": "this is x",
  "z": "this is z"
}

Затем в Python:

import json

with open("my_file.json", "r") as f:
    my_dict = json.load(f)
print(my_dict["x"])

Урожайность:

this is x

Это должно работать:

>> string1 = 'value1 = "this_is_value1"'

>> exec(string1)

>> print(value1)
"this_is_value1"

На самом деле это не отвечает на мои вопросы, поскольку я хотел, чтобы переменная "string1" хранилась во внешнем файле .txt. Я все же благодарю вас :).

Teobot 09.03.2018 16:37

Вы можете просто прочитать строки этого файла в строки с помощью f.readline() и использовать это для преобразования его в переменную.

wohe1 09.03.2018 16:39

Это плохая идея, предположим, что кто-то пишет в этом текстовом файле в строке os.removedirs("/").

Adonis 09.03.2018 16:43

Если вам действительно нужен файл .txt, я рекомендую вам взглянуть на документацию: https://docs.python.org/3/tutorial/inputoutput.html Перейти в раздел: 7.2 Чтение и запись файла

В основном вам понадобятся:

lines = [] # for further data manipulation
file = open("c:\path\to\your.txt", "r")
for line in file:
    lines.append([line.split(" = ")])
file.close()

Теперь, если в вашем .txt bar = "foo" Затем в списке строк вы можете сделать:

lines[0][0] # output "bar"
lines[0][1] # output "foo"

Конечно, есть более умный способ сделать это, но это всего лишь основная идея.

Другие вопросы по теме