Вопросы с тегами [pyyaml]

1

голосов
2

ответ
529

Просмотры

Как добавить новое поле в YAML файл в Python?

У меня есть YAML файл с содержанием: --- «Хорватия»: Население: 4600000 Столица: Загреб «Италия»: Население: 60000000 Столица: Рим Как я хочу, чтобы добавить новое поле: --- «Хорватия»: население: 4600000 столица: Загреб континент: Европа «Италия»: население: 60000000 столица: Рим континент: Европа Как добавить поле «континент» со значением Европы любого государства?
Becks
1

голосов
1

ответ
215

Просмотры

Смешивание блока и поток форматирования в YAML с Python

Я пытаюсь изменить значение вложенного глубоко в файле YAML, используя Python и PyYAML. Мне нужно, чтобы сохранить форматирование, которое представляет собой сочетание блока и потока. Я хочу изменить одно значение, вложенное в словаре несколько слоев глубоко в структуре. Например, я мог бы изменить значение х до 2: A: B: C: {х: 1, у: 1} d: {r 1: 2, r 2: 4} е: е: 1 г: 1 Я был возможность импортировать данные, изменить значение, и дамп файл с блоком форматирования или с форматированием по умолчанию, но ни точно соответствует формату, что мне нужно. Есть ли способ либо смешивать форматирование или только изменить целевое значение без переписывания всего файла?
sparrow
1

голосов
1

ответ
60

Просмотры

PyYAML file efficient management

Я пишу программу, которая поддерживает Python список контактов, каждый из которых имеет 3 поля: Имя Телефон Email Контакты должны быть сохранены в YAML структурированного файла и программа должна обеспечить средство добавления новых контактов. Мой код для этого: класс контакты: Защита add_contact (самость, файл, контакт): если не os.path.exists (файл): #creating первого темпа времени = [] temp.append (контакт) с открытым (файлом , "ш"), как file_desc: yaml.dump (темп, file_desc, default_flow_style = FALSE) file_desc.close () остальное: начиная с # Вторым открытым (файлом, "г"), как file_desc: загружено = yaml.safe_load (file_desc) loaded.append (контакт) с открытым (файл, "ш"), как file_desc2: yaml.dump (грузится, file_desc2, default_flow_style = False) file_desc2.close () file_desc.close (), если __name__ == "__main__": data1 = { 'Имя': 'Abcd', 'телефон': 1234, 'электронная почта' : '[email protected]'} data2 = { 'имя': 'EFGH', 'телефон': 5678, 'электронная почта': "[email protected]} контакт = контакты () contact.add_contact (" контакты. YAML», data1) contact.add_contact ( "contacts.yaml", data2) Я думаю, что это неэффективная реализация. Если у нас 1 миллион контактов, и мы хотим, чтобы добавить новый, это будет первым прочитать их все, добавьте один в список и написать все 1 миллион + 1 контакты снова. Есть ли способ, чтобы просто добавить новые контакты без необходимости писать весь файл снова. Я предполагаю, что чтение важно, так как я не хочу, чтобы хранить дубликаты контактов и что нужно будет сравнение. Любой другой эффективный подход будет также иметь в виду.
Adnan
1

голосов
1

ответ
971

Просмотры

Selectively dump object attributes with PyYAML

Я могу использовать YAML сваливать иерархию объектов Python, так: импорт класс YAML C (): Защита __init __ (я, х, у): self.x = х self.y = у класса D (): Защита __init __ (самообеспечение , в, г): self.c = с self.d = дд = D (с = с (х = 1, у = 'Привет'), d = 'до свидания') печати yaml.dump (г) производит выход : !! Python / объект:. __ __ Основной Ос: !! Python / объект: __ __ Основной с. {х: 1, у: привет} d: до свидания Но я хочу, чтобы выборочно скрыть некоторые атрибуты. Поэтому предположим, у меня есть функция attribs_to_dump (OBJ), который для любого объекта возвращает список имен атрибутов, я хочу сбросить, например: Защиту attribs_to_dump (объект): если OBJ .__ class__ == C: возвращение [ «х»], если OBJ .__ class__ == D: возвращение [ «с»] Мой вопрос, как я могу подключить attribs_to_dump в yaml.dump, так что я получаю следующий выход? !! Python / объект:. __ __ Основной Ос: !! Python / объект: . __Main __ С {х: 1} Там есть осложняющий фактор: Я хочу, чтобы достичь эффекта, зацепив в YAML, как он ползет по иерархии объектов, а не путем предварительной обработки иерархии объектов себе. Причина заключается в том, что не все объекты в иерархии легко поддается самоанализ из-за SetAttr / GetAttr / __ dict__ магии, которая присутствует в некоторых библиотеках я использую: - (... Все помощь ценится!
SimonD
1

голосов
1

ответ
1.4k

Просмотры

Самый быстрый способ для преобразования JavaScript объекта / массива Python Dict / список

Я пытаюсь разобрать код объектов JavaScript, которые держат огромные массивы JavaScript и преобразовать его в словарь Python со списками. На данный момент я использую PyYAML, но это не работает напрямую, так как он не может обрабатывать подряд запятые (например, он распадается на «[,,, 0,]» с: ожидается содержимое узла, но не нашел», «). Таким образом, я заменял их, но все это очень медленно. Я интересно, если любой из вас знает о лучшем и более быстром способе сделать это. JSON декодирования не работает, как JavaScript-код не действует JSON либо. Это код, я использую, пояснено выше, с js_obj в качестве примера: js_obj = "{индекса: '37', данные: [1, 2, 3 ,,,]}" Защита РЕПЛА (совпадение): содержание = re.sub (»», "", match.group (0)) = длина LEN (содержание) - 1 результат = '', если содержание [0] == '[':
1

голосов
1

ответ
739

Просмотры

PyYAML - Использование различных стилей для ключей и целых чисел и строк

--- "главный": "Каталог": "Параметры": "директива": "пункт" меню 'Параметры': "варианты": 'инструменты OtherStuff MoreStuff' "DirectoryIndex": "пункт": "DirectoryIndex": «вещи. HTM otherstuff.htm morestuff.html»FileETag": "пункт": "FileETag": 'штучки' "оставайся в живых": "пункт": "оставайся в живых": 'штучки' "KeepAliveTimeout": "пункт": "KeepAliveTimeout": 2 выше, является YAML файл, который мне нужно разобрать, редактировать, то дамп. Я решил сделать это с PyYAML на Python 2.7 (мне нужно использовать это). Я был в состоянии разобрать и редактировать. Тем не мение, поскольку YAML имеет различные стили для ключей и различных стилей для строк и чисел я не могу установить стиль по умолчанию. Я теперь интересно, как я могу использовать PyYAML сбрасывать различные стили для различных типов. Ниже то, что я делаю, чтобы разобрать и редактировать входной_файл = yaml.load (открытый ( «yamlfile»)) #Recursive функции Переберите вложенный словарь четкости редактирования (д, keytoedit = None, Новое_значение = None): для ключа, значение в г .iteritems (): если isinstance (значение, ДИКТ) и ключ == keytoedit и 'элемент' в значении: [value.iterkeys. () (следующая)] значение = {keytoedit: NewValue} редактировать (значение, keytoedit = keytoedit, Новое_значение = Новое_значение) Элиф isinstance (значение, ДИКТ) и keytoedit в значении и «пункт» не в цене и ключ = «главный»: значение [keytoedit] = Новое_значение редактировать (значение, keytoedit = keytoedit, Новое_значение = Новое_значение) Элиф isinstance (значение, ДИКТ): редактировать (значение, keytoedit = keytoedit, Новое_значение = Новое_значение) выходной_файл = файл ( 'выходной_файл', 'ж') yaml.dump (входной_файл, выходной_файл, default_flow_style = False) Итак, мне интересно, как я могу добиться того, что, если я использую default_style в yaml.dump всех типов получить тот же стиль, и мне нужно придерживаться первоначального стандарта YAML файлов. Могу ли я каким-то образом указать стили для конкретных типов с PyYAML? Edit: Вот что я так далеко, недостающий кусок двойные qoutes на клавишах и одиночных qoutes на струнах. главные: каталог: Параметры: директива: варианты пункт: Параметры: Материал OtherStuff MoreStuff DirectoryIndex: пункт: DirectoryIndex: stuff.html otherstuff.htm morestuff.html FileETag: пункт: FileETag: Материал KeepAlive: пункт: KeepAlive: 'On' KeepAliveTimeout: пункт :
Plindgren
1

голосов
1

ответ
377

Просмотры

initializing yaml module in __init__.py

Я использую PyYAML, и хотел бы иметь возможность использовать строковые конкатенации конструктора в моих .yaml файлов. Это сообщение показывает, как добавить такие конструкторы PyYAML: импорт YAML ## определяет пользовательский обработчик тега Защиты присоединиться (загрузчик, узел): сло = loader.construct_sequence (узел) возвращает «» .join ([ул (я) для I в последовательности ]) ## зарегистрировать yaml.add_constructor обработчика тега ( «! присоединиться», присоединиться) Вышеперечисленные работы, когда я ввожу его в питон терминале. Тем не менее, я хочу поставить выше в __init__.py файл my_package, так что я могу сделать: от my_package импорта YAML # my_package.__init__.py содержит вышеуказанный код yaml.load ( «»»user_dir: user_pics и DIR / дома / пользователя : присоединиться к [* DIR, / фото] "" ") Тем не менее, это происходит сбой с сообщением: AttributeError Traceback (самый последний вызов последнего) в () ----> 1 импорт simplelearn.yaml /home/mkg/projects/simplelearn/simplelearn/__init__.py в () ----> 1 импорт YAML 2 3 Защиту __join (погрузчик, узел): 4 «»»5 Сцепляет последовательность строк. /home/mkg/projects/simplelearn/simplelearn/yaml.pyc в () AttributeError: «модуль» объект не имеет атрибута «add_constructor» Что происходит? Почему не могу найти Python yaml.add_constructor? модуль»объект не имеет атрибута„add_constructor“Что происходит? Почему не могу найти Python yaml.add_constructor? модуль»объект не имеет атрибута„add_constructor“Что происходит? Почему не могу найти Python yaml.add_constructor?
SuperElectric
1

голосов
1

ответ
212

Просмотры

YAML safe_load из множества различных объектов

У меня есть огромный файл YAML с определениями тегов, как в этом фрагменте - !! питон / объект: имя manufacturer.Manufacturer: аааа адрес: !! питон / объект: address.BusinessAddress {Улица: BBBB, номер: 123, город: сссс} И мне нужно, чтобы загрузить это, первый, чтобы убедиться, что файл является правильным YAML, второй для извлечения информации на определенном дерева отдела данного определенного контекста. Я это все как вложенные dicts, списки и примитивов, которые были бы просто сделать. Но я не могу загрузить файл, как я не первоисточники Python и класс определяет, так yaml.load () выходит. Я попытался yaml.safe_load (), но это бросает и исключение. BaseLoader загружает файл, так что это правильно. Но Jumbles всех примитивной информации (номер, DateTime) вместе в виде строк. Тогда я нашел Как десериализации объекта с использованием PyYAML safe_load ?, так как файл имеет более чем 100 различных тегов определены, решения представлены здесь нецелесообразно. Должен ли я использовать некоторые другие инструменты, чтобы лишить !! определения тегов (есть по крайней мере один случай, когда !! происходит внутри обычной строки), поэтому я могу использовать safe_load. Есть ли простой способ сделать это решить, что я не знаю? Если нет, мне придется сделать некоторые строки синтаксического анализа, чтобы получить типы назад, но я думал, что я спрашиваю здесь первым.
Jack
1

голосов
3

ответ
964

Просмотры

Using Python with YAML

У меня есть YAML файл, в котором я хочу, чтобы хранить различные «игрок» в моей игре. файл YAML выглядит следующим образом: лицо: Имя: Возраст: Национальность: Footed Должность: После того, как я создал плеер файл YAML должен выглядеть следующим образом: лицо: Имя: Rich Возраст: 23 Национальность: British Footed: Right Позиция: Нападающий до сих пор мой код выглядит так: импорт YAML имя = вход ( "как тебя зовут?) возраст = INT (вход ( 'ваш возраст?)) национальность = вход (" Какой ты национальности?) ногой = вход ( 'Какая нога?) положение = вход (' Какова ваша позиция?) с открытой ( 'test.yml', 'а') как OUTFILE: outfile.write (yaml.dump ({ 'Name': имя, 'Возраст': возраст, 'национальность': национальность, 'Footed': ногой, 'Позиция': позиция})), но когда я запускаю это и дать пользовательский ввод файл YAML заканчивает тем, как: {Возраст: 2, быстроногий: г, Имя: г, Национальность: г, вакансии: г} Как получить его, чтобы добавить в файл YAML, а не добавлял, а также как я структурировать его вертикально, а не горизонтально? И, наконец, если я хочу добавить 10/20 / п число игроков я хотел бы файл YAML, чтобы сохранить их все одно под другим, так что я могу назвать каждую из них по отдельности
NewUser123
1

голосов
2

ответ
639

Просмотры

Как настроить YAML создать новые файлы журнала вместо добавления их?

В реализации питона регистратора, указанной ниже, каждый раз, когда я запускаю свою программу, журналы добавляются каждый раз к существующим файлам журнал. Как убедиться, что каждый раз, когда я запускаю мой код приложения, они записываются на свежий лог-файл? Является ли это происходит потому, что я поставил RotatingFileHandler со счетом резервного копирования, как 20 с каждым размером файла 10Мб? Должен ли я преобразовать его в простой обработчик файлов? Я использую следующую конфигурацию журнала на основе YAML в моем питона регистраторе. 1 вариант: 1 2 3 форматтеры: 4 прост: 5 Формат: '% (asctime) s -% (имя) с -% (levelname) s -% (сообщение) с' 6 7 обработчики: 8 консоли: 9 класс: ведение журнала .StreamHandler 10 уровня: ОТЛАДКА 11 форматировщика: простой 12 потока: внутр: //sys.stdout 13 14 info_handler: 15 класса: logging.handlers.RotatingFileHandler 16 уровень: 17 ИНФО форматировщик: простой 18 файла: info.log 19 maxBytes: 10485760 # 10MB 20 backupCount: 20 21 кодирования: UTF8 22 23 error_handler: 24 класс: logging.handlers.RotatingFileHandler 25 уровень: ОШИБКА 26 форматировщик: простой 27 файла: errors.log 28 maxBytes: 10485760 # 10MB 29 backupCount: 20 30 кодировка: utf8 31 32 регистраторы: 33 my_module: 34 уровень: ОШИБКА 35 обработчиков: [консоль] 36 Propagate: нет 37 38 корень: 39 уровень: ОТЛАДКА 40 обработчиков: [info_handler, info_handler] Я используя следующий питон лесоруба код инициализации для инициализации мой регистратор. 1 импорта ОС 2 импорта logging.config 3 импорта YAML 4 5 "" "Конфигурация протоколирования установки """ 6 default_path = 'logging.yaml' 7 default_level = logging.INFO 8 env_key = 'LOG_CFG'
AnilJ
1

голосов
1

ответ
62

Просмотры

Stepwise creation of a YAML file

Я столкнулся со следующей проблемой: я создаю большой набор данных (несколько 10GB) объекты питона. Я хочу, чтобы создать выходной файл в формате YAML, содержащий запись для каждого объекта, который содержит информацию об объекте сохраняется в виде вложенного словаря. Тем не менее, я никогда не держать все данные в памяти одновременно. Выходные данные должны быть сохранены в словаре отображающего имя объекта к сохраненным значениям. Простой вариант будет выглядеть следующим образом: object_1: значение_1: 42 значение_2: 23 object_2: значение_1: 17 значение_2: 13 [...] object_a_lot: значение_1: 47 значение_2: 11 Для того, чтобы держать низкий объем памяти, я хотел бы написать запись для каждого объекта и немедленно удалить его после написания. Мой текущий подход заключается в следующем: от импорта YAML свалка [...] # инициализировать huge_object_list. Здесь еще маленький с открытым ( «output.yaml», «ш» ), Как yaml_file: для my_object в huge_object_list: my_object.compute () # это взрывает размер объекта # создать одну запись для верхнего уровня ДИКТ object_entry = отвала ({my_object.name: my_object.get_yaml_data ()}, default_flow_style = False,) yaml_file.write (object_entry) my_object.delete_big_stuff () # удалить память потребляющих вещи в объекте, держать другую информацию, которая необходима позже в основном я пишу несколько словарей, но каждый имеет только один ключ, и так как имена объектов уникальны это не взрывают. Это работает, но чувствует себя немного рубить, и я хотел бы спросить, если кто-то знает, как сделать это лучше / правильным. Есть ли способ, чтобы написать большой словарь в файл YAML, одна запись в то время? для my_object в huge_object_list: my_object.compute () # это взрывает размер объекта # создать одну запись для верхнего уровня Dict object_entry = свалка ({my_object.name: my_object.get_yaml_data ()}, default_flow_style = False,) yaml_file.write (object_entry) my_object.delete_big_stuff () # удалить память потребляющих вещи в объекте, держать другую информацию, которая необходима позже в основном я пишу несколько словарей, но каждый имеет только один ключ, и так как имена объектов являются уникальными это делает не взрывают. Это работает, но чувствует себя немного рубить, и я хотел бы спросить, если кто-то знает, как сделать это лучше / правильным. Есть ли способ, чтобы написать большой словарь в файл YAML, одна запись в то время? для my_object в huge_object_list: my_object.compute () # это взрывает размер объекта # создать одну запись для верхнего уровня Dict object_entry = свалка ({my_object.name: my_object.get_yaml_data ()}, default_flow_style = False,) yaml_file.write (object_entry) my_object.delete_big_stuff () # удалить память потребляющих вещи в объекте, держать другую информацию, которая необходима позже в основном я пишу несколько словарей, но каждый имеет только один ключ, и так как имена объектов являются уникальными это делает не взрывают. Это работает, но чувствует себя немного рубить, и я хотел бы спросить, если кто-то знает, как сделать это лучше / правильным. Есть ли способ, чтобы написать большой словарь в файл YAML, одна запись в то время? вычислить () # это взрывает размер объекта # создать одну запись для верхнего уровня Dict object_entry = свалка ({my_object.name: my_object.get_yaml_data ()}, default_flow_style = False,) yaml_file.write (object_entry) my_object .delete_big_stuff () # удалить памяти потребляя материал в объекте, держать другую информацию, которая необходима позже в основном я пишу несколько словарей, но каждый имеет только один ключ, и так как имена объектов являются уникальными, это не взрывают. Это работает, но чувствует себя немного рубить, и я хотел бы спросить, если кто-то знает, как сделать это лучше / правильным. Есть ли способ, чтобы написать большой словарь в файл YAML, одна запись в то время? вычислить () # это взрывает размер объекта # создать одну запись для верхнего уровня Dict object_entry = свалка ({my_object.name: my_object.get_yaml_data ()}, default_flow_style = False,) yaml_file.write (object_entry) my_object .delete_big_stuff () # удалить памяти потребляя материал в объекте, держать другую информацию, которая необходима позже в основном я пишу несколько словарей, но каждый имеет только один ключ, и так как имена объектов являются уникальными, это не взрывают. Это работает, но чувствует себя немного рубить, и я хотел бы спросить, если кто-то знает, как сделать это лучше / правильным. Есть ли способ, чтобы написать большой словарь в файл YAML, одна запись в то время? написать (object_entry) my_object.delete_big_stuff () # удалить память потребляющих вещи в объекте, держать другую информацию, которая необходима позже В основном я пишу несколько словарей, но каждый имеет только один ключ, и так как имена объектов являются уникальными, это не удар вверх. Это работает, но чувствует себя немного рубить, и я хотел бы спросить, если кто-то знает, как сделать это лучше / правильным. Есть ли способ, чтобы написать большой словарь в файл YAML, одна запись в то время? написать (object_entry) my_object.delete_big_stuff () # удалить память потребляющих вещи в объекте, держать другую информацию, которая необходима позже В основном я пишу несколько словарей, но каждый имеет только один ключ, и так как имена объектов являются уникальными, это не удар вверх. Это работает, но чувствует себя немного рубить, и я хотел бы спросить, если кто-то знает, как сделать это лучше / правильным. Есть ли способ, чтобы написать большой словарь в файл YAML, одна запись в то время? но чувствует себя немного рубить, и я хотел бы спросить, если кто-то знает, как сделать это лучше / правильным. Есть ли способ, чтобы написать большой словарь в файл YAML, одна запись в то время? но чувствует себя немного рубить, и я хотел бы спросить, если кто-то знает, как сделать это лучше / правильным. Есть ли способ, чтобы написать большой словарь в файл YAML, одна запись в то время?
m00am
1

голосов
1

ответ
140

Просмотры

Как распечатать ворота! в pyaml?

У меня есть код, чтобы распечатать Dict как YAML, как так: импорт YAML yaml.dump ({ "Свойства": { "ImageID": "! Ссылка AParameter"}}, new_template, default_flow_style = False) Это создает: Свойства: ImageID: «! Ref AParameter» Обратите внимание, как значение для ImageID находится внутри кавычек? Я хотел бы напечатать без кавычек. Как я могу это сделать с PyYAML?
doles
1

голосов
1

ответ
178

Просмотры

Литералы в отображении отображений в YAML

Как можно создать буквальный в отображении отображений с использованием YAML? Я пытаюсь поставить литералы в отображении отображений в YAML с использованием PyYAML. На основе YAML Спекуляции отображение отображений реализуется с: Марк Макгвайр: {час: 65, средний: 0,278} Сэмми Соса: {ч: 63, ср: 0,288} в то время как буквальное сохранение разрывы строк осуществляется с помощью: Статистика: | 63 Home Runs 0,288 среднего уровень Теперь я пытаюсь объединить литералы с отображением отображений, как так: Сэмй Сос: {ч: 63, среднее: 0,288, статистика: | 63 Home Runs 0,288 средний уровень} и вышвырнут ошибка: yaml.scanner.ScannerError: при сканировании следующей лексемы найден символ «|» что не может запустить любой маркер в «test.yml», строка 4, колонка 12 Есть еще один способ или работа вокруг положить litterals внутри отображений отображений в YAML?
Woltan
1

голосов
1

ответ
291

Просмотры

Что делает глубокий = True делать в pyyaml.Loader.construct_mapping?

В поисках вокруг сети для использований пользовательских конструкторов, я вижу что-то вроде этого: Защита some_constructor (загрузчик, узел): значение = loader.construct_mapping (узел, глубокий = True) возвращает SomeClass (значение) Что делает глубокий = True делать? Я не вижу его в документации PyYAML. Похоже, мне это нужно; У меня есть файл YAML, генерируемого PyYAML МЕНЕДЖЕР и включает в себя узел якоря и псевдонимы (например, & ID003 и ID003) *; без глубокого = True Я получаю неполную карту обратно для тех объектов, содержащих якоря / псевдонимы.
Jason S
1

голосов
1

ответ
303

Просмотры

Десериализации YAML обратно в объект Python

Я пытаюсь написать правильный метод from_yaml в мой класс, чтобы иметь возможность десериализации вернуться к нему при загрузке файла YAML с использованием библиотеки ruamel.yaml. Давайте предположим, что в моем методе класса to_yaml я возвращающегося что-то вроде: @classmethod четкости to_yaml (ЦБС, самосвал, данные): dict_representation = { 'Foo': data.foo, 'бар': data.bar} возвратного dumper.represent_mapping (cls.yaml_tag, dict_representation) Теперь в методе десериализации @classmethod Защита from_yaml (ЦБС, конструктор, узел): dict_representation = constructor.construct_mapping (узел, глубокий = True) с этим я получаю TypeError: ------- -------------------------------------------------- ------------------ TypeError Traceback (самый последний вызов последнего) в () ----> 1 dict_representation = yaml.constructor. allow_duplicate_keys: 245 Args = [Ошибка типа: аргумент типа «» NoneType не итератора На самом деле пытается сделать это более опытным путем, в интерактивной оболочке: импорт ruamel.yaml YAML = ruamel.yaml.YAML () {дд = «Foo» : 'Foo'} узел = yaml.representer.represent_mapping ( '! дд', дд) dict_representation = yaml.constructor.construct_mapping (узел) вызывает такое же исключение. Что я здесь отсутствует?
DiTTiD
1

голосов
1

ответ
180

Просмотры

Как итерация файла YAML, чтобы дать все возможные комбинации из элементов в различных списках в Питоне

У меня есть YAML документ с последовательностями, как это --- Один: - A - B - C Два: - д - е Три: - F - G - H - я мне нужно, чтобы получить все возможные комбинации элементов, взятых из каждого списка один в то время, должны быть использован только один элемент в каждом случае из списка и весь список. Мне нужно сделать это питон. До сих пор я не могу распечатать файл YAML с помощью: #! / USR / бен / ENV питон импорта YAML с открытым ( "parameters.yaml", 'г') в виде потока: попробуйте: печать (yaml.load (поток)), за исключением yaml.YAMLError в отл: печать (отл)
Bhavana Mehta
1

голосов
1

ответ
394

Просмотры

PyYAML давая ошибки конструктора? [Дубликат]

Этот вопрос уже есть ответ здесь: Новая версия PyYAML изломы на большинстве объектов пользовательских питона - RepresenterError 1 ответ Так что я в настоящее время пытаются имитировать атаку небезопасной десериализации. Вот код, я использую: импорт YAML с открытым ( 'malicious.yml'), как yaml_file: содержание = yaml.load (yaml_file) печать (содержание [ 'Foo']) Файл malicious.yml содержит следующее: Foo: !! питон / объект / применить: subprocess.check_output [ «LS»] Однако, когда я бегу сценарий, я получаю следующее сообщение об ошибке: yaml.constructor.ConstructorError: не может определить конструктор для «тега тегов: yaml.org , 2002: питон / объект / применить: subprocess.check_output»в„malicious.yml“, строка 1, столбец 6 Я посмотрел вокруг немного, но все еще не мог найти, почему.
LeWot
1

голосов
1

ответ
45

Просмотры

Не Возвратившись обновления для YAML файл и возврат TypeError на обновление Струнный

У меня есть код, который, как предполагается, чтобы захватить файл YAML и читать его, (делает успешно), но также должен быть в состоянии обновить YAML вернуть один из трех вариантов: Успешное сообщения об обновлении со всеми изменениями в файл. Неудачное сообщение об обновлении с возможными местами, где файл не обновляет правильно. Пусть пользователь знает, что он / она не прошла никаких изменений, которые необходимо внести в файл (избыточные записи в файле YAML). Второй и третий варианты хорошо работает, но первый возвращается TypeError: строковые индексы должны быть целыми числами или TypeError: «INT» объект не Iterable всякий раз, когда я обновляю любые значения за пределами вложенных словарей в моем словаре д. Вот код, который я придумал: класс YAML_Config: «»»Класс, используемый для взаимодействия с .YAML типов файлов. Позволяет создавать объекты \ которым можно манипулировать и сохранять определенные YAML файлы и параметры конфигурации. '' 'DEF __init __ (я, имя файла): ''' Initial дефиниция. Определяет местоположение для сохранения нового файла .YAML или для загрузки \ предыдущего. Словарь, соответствующий файл .YAML сохраняется в self.dict. \ Если это новый файл .YAML, пустой словарь создан. Входные аргументы: -filename: (строка) имя файла, в котором текущий файл .YAML является \ расположенного или новый .YAML будет сохранен. «»»#Get имя файла и сохранить его в класс в качестве свойства. self.file = имя_файл # Проверяет, если файл существует ... если os.path.isfile (self.file): #Prepare, чтобы открыть файл с возможностями чтения с открытым (self.file, «г»), как INFILE: #get словарь со всеми из informatin YAML. yaml_dict = yaml.load (входной_файл) #If файл не существует ... еще: #create пустой словарь, чтобы сохранить все данные YAML. yaml_dict = {} #create пустой файл .yaml со словарем. с открытой (self.file, «ж»), как INFILE: Сохранять обновленный словарь в YAML файл. yaml.dump (yaml_dict, входной_файл, default_flow_style = False) печать ( 'конфигурационный файл YAML не найдена новый пустой словарь, и .yaml созданного файла.') self.dict = yaml_dict Защиты update_value (самостоятельно, kwargs): ''» Используется для обновления YAML файлов, и проверяет, что файлы были обновлены должным образом. «»»#If это не ключевые аргументы, а затем выдаст ошибку. утверждают kwargs «Ошибка ввода» #get словаря YAML перед обновлением. yaml_dict = self.dict #Make копию словаря для сравнения позже. yaml_dict_original = copy.deepcopy (self.dict) # Проверяем если словарь nonetype. Это происходит, если файл является новым, как файл пуст. если yaml_dict_original не None: #Redefine словарь как оригинал пустой словарь. yaml_dict_original = {} #The новый словарь будет просто то, что передается в функцию. yaml_dict = kwargs еще: #Update оригинального словаря и обновить его с аргументами, переданными. # Эти также обновляет self.dict, как yaml_dict просто ссылка на #that словаря, а не копия этого. yaml_dict.update (kwargs) # Проверяет, если изменения были сделаны, если (yaml_dict == yaml_dict_original) ложен: # Откройте файл YAML для записи в него. с открытым (self.file, «ж») в выходном файле: Сохранять обновленный словарь в YAML файл. yaml.dump (self.dict, выходной_файл, default_flow_style = False) # Проверяем, что файл на самом деле обновляется правильно: # Дважды проверьте файл, который на самом деле обновляется. с открытым (self.file, 'R'), как INFILE: lastupdate = YAML. нагрузка (входной_файл) #get любые nonmatching значения между тем, что должно быть в файле YAML и что на самом деле. ошибки = {к: yaml_dict [к] для к в множестве (yaml_dict) - набор (lastupdate)} #find, что изменилось в файле YAML. правки = {к: yaml_dict_original [к] для к в наборе (yaml_dict_original) - набор (lastupdate)} # Проверяем, если ошибки не пусто. Оценка словарей, как логическое либо возвращает True (не пусто) #or Ложные (пусто). если BOOL (ошибки) является True: # Первой линии возврата оператора печати. печать ( «Следующие записи не обновлялись успешно:») #loop через ключи в ошибках при п в ошибках: #Print текущего ключа печати (п) #loop через запись текущего ключа для т в ошибках [N]: #Print записи текущей текущего ключа печати (м, «:», ошибки [п] [м]) #Saved правильно проверьте редактирования и отображения пользователю. еще: # Поиска, где сделано какое-либо изменение. редактирует = {к: yaml_dict_original [к] для к в yaml_dict_original, если к в lastupdate и yaml_dict_original [к] = lastupdate [к]!} Показывать пользователь редактирует то, что было сделано успешно. печать ( «% s был успешно обновлен со следующими изменениями:»% os.path.basename (self.file)) #loop с помощью клавиш в редактировании для п в правке: #Print текущего ключа печати (п) #loop через запись текущего ключа для м в правках [п]: #Print начального тока текущего ключа печати (м, «:», редактирует [п] [м]) #If нет изменения были сделаны ... еще: #show пользователя, что редактирует были успешно сделано. печать ( "Никаких изменений в% s были переданы. Файл не обновляется.% os.path.basename (self.file)) тест = YAML_Config (г '... Путь \ Python Работа \ yaml_test.yaml') d = { 'A': 7, 'B': { 'C': 'D', 'D': false, 'E': 'Julio'}, \ 'The Real C': { 'J?': 'Да, это Дж ' 'К': 241},' Q»: 'PQ'} test.update_value (д) Первая секция Ошибка: Ь = { 'А': '', 'В': { 'С': 'D', 'D': false, 'E': 'Хулио'}, \ 'Реальный С': { '? J' : 'Да, это Я.', 'K': 241}, 'Q': 'PQ'} #TypeError: строковые индексы должны быть целыми числами. test.update_value (б) Вторая секция Ошибка: F = { 'А': 7, 'B': { 'C': 'D', 'D': false, 'E': 'Хулио'}, \ «The Реальный С ': {' J? ':' Да, это Я. ' 'К': 241},' Q»: 2} #TypeError: 'INT' объект не итератора. test.update_value (е) файл YAML обновляет каждый раз, когда я запускаю этот код. Таким образом, реальное обновление работает, но я не совсем уверен, почему я не могу найти индексы словарных обновлений. Я немного ржавый на моем Python, и новые для YAML, так что я может отсутствовать что-то очевидное здесь. Я использую Python 3.6.5.
Colorful Ed
1

голосов
1

ответ
82

Просмотры

Как читать пользовательские сериализован объект YAML (написанный Rails) с Python?

Я работаю с базой данных, которая содержит Rails сериализованных значений в одном столбце. Эти значения должны быть регулярными хэш, но из-за неправильно дезинфицирующие параметры они были сохранены в качестве HashWithIndifferentAccess или параметров. Например, одна запись колонка выглядит следующим образом:! --- рубин / объект: ActionController :: Параметры Параметры: рубиновый / хэш: ActiveSupport :: HashWithIndifferentAccess WindowHeight: 946 documentHeight: 3679 scrollTop: 500 допустима: ложь Я хочу прочитать с реализацией YAML в Python, но когда я пытаюсь сделать это, я получаю: *** yaml.constructor.ConstructorError: не может определить конструктор для тега «рубина / объекта: ActionController :: Параметры» в «», линия 1 , колонка 5: --- рубин / объект: ActionController :: P ... ^ Так, по какой-то причине он ожидает конструктор. Но совершенно очевидно, само значение просто обычный словарь. Как я все еще могу читать?
slhck
1

голосов
1

ответ
167

Просмотры

Переопределение from_yaml добавлять пользовательские YAML тег

Является ли переопределение достаточно from_yaml зарегистрировать тег из класса или необходимо использовать yaml.add_constructor (Class.yaml_tag, Class.from_yaml)? Если я не использую тэ метод add_constructor, мои YAML теги не распознаются. Пример того, что у меня есть: импорт класс YAML-то (yaml.YAMLObject): «! Что-то» yaml_tag = и @classmethod Защиту from_yaml (ЦБС, погрузчик, узел): # Установить атрибуты None, если не в файл значений = loader.construct_mapping ( узел, глубокий = True) атр = [ 'attr1', 'attr2'] результат = {} для Вала в ATTR: попробуйте: результат [вал] = значение [вал], за исключением KeyError: результат [вал] = None возвращаемых C (* * результат) этого достаточно для того, чтобы работать? Я' запутался с использованием from_yaml против любого другого конструктора вы бы зарегистрировать с помощью метода я уже упоминал выше. Я предполагаю, что есть что-то фундаментальное я пропускаю, так как они говорят: Наследование YAMLObject простой способ определить тег, конструктор и representers для своих классов. Вам только нужно переопределить атрибут yaml_tag. Если вы хотите определить свой собственный конструктор и МЕНЕДЖЕР, переопределить from_yaml и to_yaml метод соответственно.
cap
1

голосов
2

ответ
0

Просмотры

Выведение YAML с Python: неправильное форматирование без списков на входе

Я пытаюсь создать YAML из словарей Python. До сих пор я пытался как PyYAML и ruamel.yaml и оба имеют один и тот же результат: если словарь ввода не содержит список, вывод отформатирован неправильно. Вот сценарий: от ruamel импорта YAML импорта SYS yaml.dump ({ 'имя': 'Enterprise', 'класс': 'Galaxy', 'вооружению': [ 'фотонные торпеды', 'фазер'], 'число': 1701}, sys.stdout) печать ( '\ п') yaml.dump ({ 'имя': 'предприятие', 'класс': 'Galaxy', 'число': 1701}, sys.stdout) А вот выход : вооружение: [фотонные торпеды, фазеры] класс: Galaxy имя: номер предприятие: 1701 {класс: галактики, имя: предприятия, номер: 1701} требуемый вывод о том, что второй YAML дамп должен быть отформатирован, как и первой.
John Allie
1

голосов
1

ответ
0

Просмотры

Как по умолчанию CLoader в PyYaml.load

Есть ли способ иметь загрузчик по умолчанию для PyYAML быть CLoader. Таким образом, вместо того, чтобы сделать yaml.load (F, Loader = yaml.CLoader) Было бы просто по умолчанию CLoader, так что я мог бы сделать: yaml.load (е)
johannix
1

голосов
1

ответ
2.7k

Просмотры

PyYAML пользовательских тегов для кортежа кортежей

Я планирую использовать PyYAML для файла конфигурации. Некоторые из пунктов в этом конфигурационном файле Python кортежей кортежей. Так, мне нужен удобный способ представить их. Можно представить Python кортежи кортежей следующего использование PyYAML печать yaml.load ( "!! Python / кортеж [!! Python / кортежа [1, 2], !! Python / кортеж [3, 4]]") Тем не менее, этот не удобно использовать для обозначения длинной последовательности элементов. Я думаю, что это должно быть возможно определить пользовательский тег, как Python / tuple_of_tuples. Т.е. что-то вроде yaml.load ( «!! питон / tuple_of_tuples [[1,2], [3,4]]») См свою первую попытку определить это ниже, имитируя, как определено питон / кортеж, и пытается сделать аналогичные подклассы. Он выходит из строя, но дает представление о том, что я после, я думаю. У меня есть вторая попытка, которая работает, но это обман, так как он просто вызывает Eval. Если я могу' т найти что-нибудь лучше, я буду использовать это. Тем не менее, YAML предназначен в качестве замены для ConfigObj, который использует INI-файлы, и значительно менее мощный, чем YAML, и я использовал тот же подход (а именно Eval) для кортежей кортежей. Так что в этом отношении он не будет хуже. Правильное решение было бы только приветствовать. У меня есть несколько замечаний по поводу моего первого решения. Я бы подумал, что конструктор construct_python_tuple_of_tuples бы вернуть заполненную структуру, но на самом деле, кажется, возвращает пустую структуру следующим образом ([], []) Я отследил звонки, и там, кажется, много сложного материала происходит после того, как construct_python_tuple_of_tuples называется. Значение, возвращенное кортеж из списков целых чисел, так что довольно близко к желаемому результату. Таким образом, структура должна быть завершена позднее. Линия с кортежем ([кортеж (т) при ^ х]) была моя попытка принудить список кортежей кортеж кортежей, но если я вернусь, что из construct_python_tuple_of_tuples, затем полученный вызов yaml.load ( "! ! питон / tuple_of_tuples [[1,2], [3,4]] ") просто ((), ()) Не уверен, что с yaml.org, 2002 Почему 2002? Первая попытка импорта YAML из yaml.constructor импорта Конструктор четкости construct_python_tuple_of_tuples (самостоятельно, узел): # Полное содержание construct_python_tuple # это # ​​возвращает кортеж (self.construct_sequence (узел)) печать «узел», узел х = кортеж (self.construct_sequence ( узел)) печать "х", х = Foo кортеж ([кортеж (т) при т в х]) печать "Foo", Foo возвращение х Constructor.construct_python_tuple_of_tuples = construct_python_tuple_of_tuples Конструктор.
Faheem Mitha
1

голосов
3

ответ
1.8k

Просмотры

Могу ли я запросить набор данных YAML в Python?

Подобно Есть язык запросов для JSON? и более конкретно Как я могу фильтровать YAML набор данных со значением атрибута? - Я хотел бы: вручную редактировать небольшие количества данных в YAML файлах выполнять произвольные запросы на полном наборе данных (возможно в Python, открытом для других идей) работать с результирующим подмножеством в Python Это не кажется, что PyYAML имеет функцию как это, и сегодня я не могу найти ссылку, я должен был язык YQuery, который не был зрелый проект в любом случае (или, может быть, я это приснилось). Есть (Python) библиотека, которая предлагает YAML запросы? Если нет, то есть ли Pythonic способ «запрос» множество объектов, кроме как раз перебор над ними?
d3vid
1

голосов
1

ответ
4.2k

Просмотры

Условный Python для цикла на основе данных YAML

Я новичок в Python так, пожалуйста, медведь со мной. Я пытаюсь понять, как цикл через набор значений в файле YAML. Файл анализируется с помощью PyYAML, а затем нужно будет подавать в контур. Вот некоторые YAML, например: dohicky.yml --- #Example файл dohicky: "1": Материал: - Данные - Данные Morestuff: - Данные - Data "2": Материал: - Данные - Данные Morestuff: - Данные - Данные «п»: - Etc Во-первых, я потянув содержимое YAML из. импорта YAML F = открыто ( «dohicky.yml») dohicky = yaml.safe_load (е) f.close () Теперь мне просто нужно либо цикл или время цикла перебора каждого пронумерованный «ID» под «dohicky». для й в xrange (1, 2): Таким образом, очевидно, что это будет работать, но статический определенно только для 2 элементов. Не знаю, как, например: "Do While" ID = dohicky [ "dohicky"] [ "х"] верно. #Not код, просто концепция! Другая проблема, я сразу бегу в том, чтобы затем создать объект внутри этого цикла. Например: ид (х) = dohicky (Проходят другую информацию от YAML до класса) код #Not, только концепция! К сожалению, я не достаточно хорошо знаком с Python еще (withPyYAML), чтобы понять синтаксис. Любая помощь высоко ценится! * UPDATE * Это своего рода Судо код, но вы должны понимать, что я пытаюсь сделать, по крайней мере. импорта YAML F = открыты ( 'dohicky.yml') dohicky = yaml.safe_load (е) f.close () для й в dohicky [ "dohicky"] [ "х"] = тест dohicky [ "dohicky"] [ "1 «] [» Stuff "] распечатке теста в этом тесте я просто напечатав выход„штучек“, но в действительности,
Atomiklan
1

голосов
2

ответ
11k

Просмотры

Разбираем YAML в список в Python

Я должен использовать YAML для проекта. У меня есть файл YAML, который я использую для заполнения списка в программе Python, который взаимодействует с данными. Мои данные выглядит следующим образом: Сотрудники: CustID: 200 пользователя: Ash - Смит - Cox Мне нужен код питона перебрать этого YAML файл и заполнить список, как это: list_of_Employees = [ «Ясень», «Смит» «Кокс»] Я знаю, что я должен открыть файл, а затем хранить данные в переменной, но я не могу понять, как вводить каждый элемент по отдельности в виде списка. В идеале я хотел бы использовать функцию на добавление, поэтому я не должен определить мой «пользователь» размер каждый раз.
johnfk3
0

голосов
0

ответ
4

Просмотры

PyPy (Winow10) ImportError: Нет модуль с именем YAML

Я успешно установить PyYAML, но по-прежнему сталкиваются ниже ошибки импорта. (Змеи) C: \ Users \ Acer \ pypy2.7-версия 7.0.0-win32> пип установить PyYAML устаревания: Python 2.7 достигнет конца своей жизни на 1 января 2020 года обновите Python в Python 2.7 не будет сохраняться после этой даты. Будущая версия пип будет падать поддержка Python 2.7. Требование уже удовлетворено: PyYAML в C: \ Users \ Асер \ anaconda3 \ envs \ змеи \ Lib \ сайт-пакеты (5.1) (змеи) C: \ Users \ Acer \ pypy2.7-версия 7.0.0-win32> PyPy Python 2.7 +0,13 (9112c8071614, 6 февраля 2019, 23:10:08) [PyPy 7.0.0 с MSC v.1500 32 бит] на win32 типа "помощь", "авторское право", "кредиты" или "лицензия" для получения дополнительной информации. >>>> импорт YAML Traceback (самый последний вызов последнего): Файл "", линия 1, в ImportError:
Casey Yeow
1

голосов
2

ответ
575

Просмотры

PyYAML: как задать включаемый каталог?

Я строю libyaml и установить его в локальной области: YAML-0.1.5 $ ./configure --prefix = / USR / местные / sqlminus YAML-0.1.5 $ сделать установку YAML-0.1.5 $ Ls -l / USR / местный / sqlminus / включить / yaml.h -rw-г - г - 1 @ тк админ 54225 5 января 9:05 /usr/local/sqlminus/include/yaml.h Но когда я строю PyYAML, он не может найти YAML .час. PyYAML-3,11 $ / USR / местный / sqlminus / bin / питон setup.py сборка проверка, если libyaml откомпилирована НКА -f-строг-Aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-прототипы -I /usr/local/sqlminus/include/python2.7 -с построить / temp.macosx-10,4-x86_64-2.7 / check_libyaml.c -o построить / temp.macosx-10.4-x86_64-2.7 / check_libyaml.o построить / темп. MacOSX-10,4-x86_64-2.7 / check_libyaml.c: 2: 10: фатальная ошибка: файл 'yaml.h' не найден генерироваться #include ^ 1 ошибка. Как я могу сказать PyYAML, где я установил libyaml?
Mark Harrison
1

голосов
1

ответ
32

Просмотры

PyYAML бросать неразрешимую ошибку

Я работаю с YAML файлов и я застрял в использовании «|» для буквальных цитат. Я использую PyYAML. Основная проблема здесь в том, что он работает для первого уровня Key «Словарь» в коде ниже, но для второго уровня «отмечает» ключ он не работал. Я попытался с помощью «>» «| +» «| -», но ничего не получалось. Описание: | Это образец текста, показывающий, что она отлично работает здесь. Подписи: - {ReturnValue: 'заполнитель', отмечает: | Его не работает здесь} - {ReturnValue: «другой заполнитель», отмечает: "Это работает здесь} Я проверил синтаксис на http://yaml-online-parser.appspot.com/, https: //nodeca.github , IO / JS-YAML / и другие, а также, я получил сообщение об ошибке, что ОШИБКА: при сканировании следующих маркеров найденного символа «|» что не может запустить любой маркер в «», строка 8, столбец 24: примечания: | Я прошел через поток в YAML, как я разбить строку на несколько строк? и некоторые другие, но ничего не получалось.
Rishi Agrawal
1

голосов
2

ответ
520

Просмотры

Как сбросить значения над словарем в Python?

У меня есть YAML файл, который не может быть совершено в моем хранилище, потому что содержит пароль и разумную информацию. Это выглядит следующим образом: DevOps: ветви: somebranch пароль: поставщик: digital_ocean: маркер: "" АМС: боб: access_key_id: "XXX" secret_access_key: "XXX" джим: access_key_id: "XXX" secret_access_key: "XXX" Dev: боб: «секрет» джим: «еще один секрет» приложение: мама: Zookeeper: «XXX» админы: «XXX» Я пытаюсь разработать сценарий в Python было я могу удалить все пароли в этом моем файле. И это я могу совершить в мое хранилище, он должен выглядеть после обработки: DevOps: филиал: 0} Есть ли способ перебрать мой словарь и установить значения только для моих паролей? Или я должен изменить структуру моего файла YAML?
Valter Silva
1

голосов
1

ответ
489

Просмотры

Error while reading YAML file in python

I have a yaml file that looks like this: %YAML 1.0 temp: !!opencv-matrix rows: 2 cols: 23 dt: f data: [ 3.35620789e+02, 3.64299591e+02, 3.95790131e+02, 4.39863068e+02, 4.68664948e+02, 4.93518127e+02, 4.17159943e+02, 4.21060364e+02, 3.99990234e+02, 4.17867157e+02, 4.34151215e+02, 3.56201202e+02, 3.77741028e+02, 3.87051544e+02, 3.76879913e+02, 4.42746796e+02, 4.52483917e+02, 4.73469604e+02, 4.52954742e+02, 3.78402283e+02, 4.17679047e+02, 4.50588501e+02, 4.16388153e+02, 9.05276794e+01, 9.21245193e+01, 1.02799362e+02, 9.93146744e+01, 8.40704346e+01, 7.84236526e+01, 1.15820358e+02, 1.76747055e+02, 1.61153061e+02, 1.68130676e+02, 1.58446228e+02, 1.07421455e+02, 1.03407494e+02, 1.05380608e+02, 1.08374542e+02, 1.01048920e+02, 9.76309204e+01, 9.83933716e+01, 1.02486870e+02, 1.71890350e+02, 1.81417206e+02, 1.66303802e+02, 1.95539871e+02 ] It is basically an opencv matrix and I have created the file in a c++ code. Now I want to read this file in python and I have this code: import yaml with open("reference_3d.yml") as fin: rfr = yaml.load(fin.read()) But when I run the code, it gives me this error: Traceback (most recent call last): File "scatter_plot.py", line 15, in rfr = yaml.load(fin.read()) File "/usr/local/lib/python2.7/site-packages/yaml/__init__.py", line 71, in load return loader.get_single_data() File "/usr/local/lib/python2.7/site-packages/yaml/constructor.py", line 37, in get_single_data node = self.get_single_node() File "/usr/local/lib/python2.7/site-packages/yaml/composer.py", line 35, in get_single_node if not self.check_event(StreamEndEvent): File "/usr/local/lib/python2.7/site-packages/yaml/parser.py", line 98, in check_event self.current_event = self.state() File "/usr/local/lib/python2.7/site-packages/yaml/parser.py", line 157, in parse_implicit_document_start return self.parse_document_start() File "/usr/local/lib/python2.7/site-packages/yaml/parser.py", line 174, in parse_document_start self.peek_token().start_mark) yaml.parser.ParserError: expected '', but found '' in "", line 2, column 2: temp: !!opencv-matrix ^ Any idea how should I resolve this error?
user2308191
1

голосов
2

ответ
760

Просмотры

Как закомментировать раздел YAML с использованием ruamel.yaml?

Недавно я пытался управлять моей конфигурации службы докер-создания сообщения (а именно докер-compose.yml) с использованием ruamel.yaml. Мне нужно закомментировать и раскомментировать блок обслуживания, когда это необходимо. Предположу, у меня есть следующий файл: версия: услуги '2': Srv1: изображения: альпийский container_name: SRV1 объемов: - некоторый-объем: / некоторые / путь SRV2: изображения: альпийский container_name: SRV2 volumes_from: - некоторый объем тома: некоторые -VOLUME: есть ли какой-нибудь обходной путь, чтобы закомментировать блок SRV2? Как и следующий вывод: версия: услуги '2': Srv1: изображения: альпийский container_name: SRV1 объемов: - некоторый объем: / некоторый / путь # SRV2: # изображения: альпийский # container_name: SRV2 # volumes_from: # - некоторые объема объемы: некоторый объем: Кроме того, есть способ раскомментировать этот блок? (Предположим, я уже имеют оригинальный SRV2 блок, мне просто нужен метод, чтобы удалить эти строки комментариев)
cherrot
1

голосов
1

ответ
1.2k

Просмотры

Как получить доступ и изменять содержимое файла YAML из питона?

Я хотел бы получить доступ и изменять содержимое YAML файл, который выглядит следующим образом: A: Sonstige B: C: Sonstige D: нулевой E: 1 Я знаю, что для того, чтобы получить доступ и изменить значение А в приведенной выше YAML файл, я хотел бы использовать код вроде следующее: Защита set_state (состояние): с открытым ( 'my_file.yaml') как F: док = yaml.load (е) доком [ 'A'] = состоянием с открытым ( 'my_file. YAML»,„ж“), а е: yaml.dump (док, е) Но что, если я хотел бы изменить значение Е в указанном файле YAML? Как я могу получить доступ к значению Е и изменить его значение и сбрасывать его в файл YAML, похожий на приведенный выше код. Я перешел ссылочных документы и не смогли найти ответ на это.
Suhas Chikkanna
1

голосов
1

ответ
104

Просмотры

Ошибка при загрузке, если ключ YAML не имеет значения (вместо None)?

У меня есть YAML файл с неизвестным количеством «слоев», поэтому, когда я загрузить его в словарь Python становится вложенным словарь. Я не хочу, чтобы ключи без значений в файле YAML. Я хотел бы либо: привести к ошибкам при yaml.load (), если есть пропущенные значения, или определить все значения None в результате вложенного словаря. импорта YAML с открытым (input_path, "г"), как yaml_file: my_dict = yaml.load (yaml_file)
forest
1

голосов
2

ответ
356

Просмотры

вставки узла в YAML с ruamel

Я хотел бы напечатал следующее расположение: дополнительно: идентификаторы: biotools: - http://bio.tools/abyss Я использую этот код для добавления узлов: yaml_file_content [ «лишних»] [ «идентификаторов»] = {} yaml_file_content [ 'лишние'] [ 'идентификаторы'] [ 'biotools'] = [ '- http://bio.tools/abyss'] Но, вместо этого, я получаю этот выход, который инкапсулирует инструмент в []: дополнительно: идентификаторы: biotools: [ «- http://bio.tools/abyss»] Я пробовал другие комбинации, но не работает?
ypriverol
1

голосов
1

ответ
216

Просмотры

PyYAML не может загрузить из файла, но можно написать

У меня возникли проблемы с PyYAML, и я не уверен, если я делаю что-то неправильно. Это код: импорт YAML открыт ( "а", "W +") с открытой ( "а", "г +"), как F: yaml.dump ({ 'Foo': 'бар'}, е) печати (YAML .load (е)) Когда я смотрю в файле каталога а есть, и, открыв его в Блокноте показывает мне это: {Foo: бар} Однако, печать (yaml.load (е)) не выводит None в консоли у меня есть чувство, что это связано с файлом, который уже открыт и / или режим я использую, чтобы открыть файл, потому что я получил его на работу в общей сложности 1 раз, когда я бездельничал, и когда я повторил Таже рАБОТА он не работает, опять же, не печать None
Matt M.
1

голосов
2

ответ
639

Просмотры

удалить одиночные кавычки из значений Dict при добавлении содержимого в YAML файл с помощью питона ruamel.yaml

У меня есть файл YAML, как упомянуто ниже test1.yaml ресурсов: имя: {get_param: VNAME} ssh_keypair: {get_param: ssh_keypair} Теперь я хочу добавить test1_routable_net: {get_param: abc_routable_net} по ресурсам test1.yaml Вот код, который Я попытался импорта ruamel.yaml YAML = ruamel.yaml.YAML () тест = "{get_param: abc_routable_net}". полоса ( '\ ') с открытым ('/ TMP / test1.yaml') в Fp: данные = YAML .load (Fp) данные [ ''] ресурсы обновление ({ 'test1_routable_net': тест}). yaml.dump (данные, файл ( '/ tes2.yaml', 'W')) выход выше код tes2.yaml ресурсы: имя: {get_param: VNAME} ssh_keypair: {get_param: ssh_keypair} test1_routable_net: {get_param: abc_routable_net} 'Желаемая выход tes2.yaml ресурсы: имя: {get_param: VNAME} ssh_keypair: {get_param:ssh_keypair} test1_routable_net: {get_param: abc_routable_net} Я попытался с помощью test.strip ( «\» '), но не использовать до сих пор я вижу одиночные кавычки для значения .... Как я могу удалить эти цитаты из значения?
Naresh
1

голосов
1

ответ
198

Просмотры

Приукрасить YAML с комментариями

1. Заключение Я не могу найти, как я могу автоматически приукрасить мои YAML файлы. 2. Пример данных: У меня есть SashaPrettifyYAML.yaml файлы: sasha_commands: # Sasha комментарий sasha_command_help: {Вызывает: sublime.command_help, Надпись: 'Саша Команда: Команда Help'} 3. Ожидаемого поведения Я хочу удалить {фигурные скобки}: sasha_commands: # Саша комментарий sasha_command_help: звоните: sublime.command_help надпись: «Саша Команда: Справка по командам» 4. Не помогло Довольно YAML (на основе PyYAML) и онлайн форматтеры в YAML Formatter и OnlineYAMLTools удалять комментарии; Я не могу найти нужный параметр в ruamel.yaml.cmd; выравнивать-YAML выравнивать, не приукрашивают YAML файл.
1

голосов
4

ответ
7k

Просмотры

ImportError: модуль не назван «YAML»

У меня есть один сценарий, в котором я пытаюсь выполнить python3 ENV / common_config / add_imagepullsecret.py Но, я получаю следующее сообщение об ошибке: [корень @ Кевином] # python3 окр / common_config / add_imagepullsecret.py Traceback (самый последний вызов последнего): Файл "окр / common_config / add_imagepullsecret.py", линия 4, импортно YAML ImportError: Нет модуля с именем 'YAML' [корень @ Кевин] # PIP3 установить PyYAML Requirement уже удовлетворен: PyYAML в /usr/lib64/python3.4/site -packages (3,12) [корень @ Кевин] # PyYAML уже установлен на компьютере: [Root @ bhimsvm31 K8S] # PIP3 установить PyYAML требование уже удовлетворен: PyYAML в /usr/lib64/python3.4/site-packages (3,12) [корень @ bhimsvm31 K8S] # Как я могу получить этот скрипт для импорта PyYAML?
Neeraj
1

голосов
2

ответ
347

Просмотры

Python ruamel.yaml отвалов тегов цитат

Я пытаюсь использовать ruamel.yaml изменить шаблон AWS CloudFormation на лету с помощью питона. Я добавил следующий код, чтобы сделать safe_load работы с CloudFormation функциями, такими как! Ref. Тем не менее, когда я сбросить их, эти значения с! Ref (или любыми другими функциями) будут завернуты в кавычках. CloudFormation не в состоянии определить, что. Смотрите пример ниже: импорт Sys, JSON, Ио, boto3 импорта ruamel.yaml Защита funcparse (загрузчик, узел): node.value = {ruamel.yaml.ScalarNode: loader.construct_scalar, ruamel.yaml.SequenceNode: loader.construct_sequence, ruamel .yaml.MappingNode:. loader.construct_mapping} [тип (узел)] (узел) node.tag = node.tag.replace ( '! реф' и, 'Ссылка') заменить (и, u'Fn '!' :: ') возвращение ДИКТ ([(node.tag, node.value)]) funcnames = [ 'Ссылка', 'Base64',' Ссылка Барр аа: Ссылка Б.Б. выход такова: Foo: Ресурсы: RouteTableId: VpcPeeringConnectionId «Ссылка ааа!»: 'Ссылка ГЭБА! ВашеИмя: DFW Имя: а Обратите внимание на «! Ref VpcRouteTable» это было обернута в одиночных кавычках , Это не будет идентифицироваться CloudFormation. Есть ли способ настроить дампер так, что на выходе будет примерно так: Foo: Ресурсы: RouteTableId: Ссылка ааа VpcPeeringConnectionId: Ссылка В ВашеИмя: DFW Имени: а Других вещи я пытался: PyYAML библиотека, работает так же, использование Ref: : вместо Ref, работает так же, т быть идентифицированы CloudFormation. Есть ли способ настроить дампер так, что на выходе будет примерно так: Foo: Ресурсы: RouteTableId: Ссылка ааа VpcPeeringConnectionId: Ссылка В ВашеИмя: DFW Имени: а Других вещи я пытался: PyYAML библиотека, работает так же, использование Ref: : вместо Ref, работает так же, т быть идентифицированы CloudFormation. Есть ли способ настроить дампер так, что на выходе будет примерно так: Foo: Ресурсы: RouteTableId: Ссылка ааа VpcPeeringConnectionId: Ссылка В ВашеИмя: DFW Имени: а Других вещи я пытался: PyYAML библиотека, работает так же, использование Ref: : вместо Ref, работает так же,
mattsun

Просмотр дополнительных вопросов