Я хочу получать переменные из внешнего файла .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 или другие типы файлов.
Я уже пробовал импортировать файл, но поскольку он должен находиться рядом со скриптом, я не могу использовать Импортировать
Другие ответчики просто не предоставляют информации о том, как они решили проблему.
Взгляните на модуль configparser, чтобы узнать о безопасном и простом способе хранения таких конфигураций.
Либо inifile, либо файл в формате json, загруженный в dict, должен решить вашу проблему.
«... эти ответы используют .py или другие типы файлов» - но методы работают? Тогда обманывайте. Переименуйте файл .txt в .py, импортируйте, переименуйте обратно.
Или вы можете использовать pickle, pickle.dump и pickle.load
@match Я новичок в python, но, глядя на inifile, он выглядит многообещающим. Есть ли хорошая ссылка?
@ usr2564301 не могли бы вы объяснить дальше?
Здесь есть хорошее объяснение configparser: pymotw.com/3/configparser
@Adonis Я попытался отформатировать его в формат json, но что-то пошло не так, не могли бы вы описать, как это можно сделать?
Вы сказали, что нашли рабочие решения для файлов с расширением .py. Так что переименуйте файл, пусть даже временно. Я не знаю, какие решения вы нашли, поэтому не могу дать дополнительных советов, кроме этого.
переименовывать файл действительно не нужно, когда уже есть много вариантов для чтения. Можно также установить переменные среды в bash и извлечь из os.environ
@ usr2564301 Я нашел возможное решение с сохранением моей переменной в .py, но я не мог импортировать ее, поскольку она была локальной рядом с моим скриптом.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Обычно мне нравится управлять этим процессом с помощью метода или функции. Вот фрагмент кода, который я часто использую, чтобы прочитать формат текстового файла, который вы показали:
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)
Я немного запутался в том, что это делает, не могли бы вы объяснить немного больше :)
Я обновил ответ примером варианта использования. Это полезно, потому что приложение содержит все настроенные параметры как атрибуты класса.
Для файла в формате 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. Я все же благодарю вас :).
Вы можете просто прочитать строки этого файла в строки с помощью f.readline() и использовать это для преобразования его в переменную.
Это плохая идея, предположим, что кто-то пишет в этом текстовом файле в строке os.removedirs("/").
Если вам действительно нужен файл .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"
Конечно, есть более умный способ сделать это, но это всего лишь основная идея.
Зачем они вам как переменные?
dictнедостаточно хорош?