Сегодня появилась задача: достать информацию из XML файла, содержащего базу данных одного интернет магазина. Причём это не простого xml файл, а файл особого вида - от Яндекса "YML". Единственное, что упрощало задачу - надо было получить только список названий товаров. Являясь программистом и ленивой ж$%ой по совместительству, я решил автоматизировать процесс.
Этот файл был создан интернет магазином. И в нём содержались атрибуты всех его товаров. Мне нужны были только названия, заключенные в тэг <name></name>. Я не хотел не только вникать, но даже читать описание YML формата. Поэтому схитрил и сделал программу, которая получает содержание этого тэга. В конце статьи приведён текст программы.
Использую Linux Mint как операционную систему, в которой по умолчанию есть язык программирования Python. В статье "На чём программируют программисты?" уже говорил, что мне абсолютно без разницы на чём писать программы. Лишь бы они делали своё дело. Если Python бесплатный и уже установлен у меня, то пускай будет он!
for item in dContent.split('</name>'):
if '<name>' in item:
print item [ item.find('<name>')+len('<name>') : ]
И это весь цикл, который перебирает содержимое yml файла, находящееся в переменной dContent. Да, всего 3 строчки кода, которые выводят на экран список названий товаров! Но мне нужен был опрятный результат, поэтому программу пришлось доработать чтобы:
- результат записывался в файл
- учитывалась кодировка файла источника (она в cp1251, а Python с ней по умолчанию не дружит!)
В итоге, я поучил такой парсер. Причём ему абсолютно все равно XML или YML файл он обрабатывает. Главное, чтобы был тег:
#!/usr/bin/env python
# coding: utf-8inp = open('market.yml', 'r')
content = inp.read()
inp.close()
dContent = content.decode('cp1251')res=''
for item in dContent.split('</name>'):
if '<name>' in item:
name=item [ item.find('<name>')+len('<name>') : ]
res=res + name + '\n'writeData=res.encode('utf-8')
out = open('names.txt', 'w')
out.write(writeData)
out.close()