Змея / Говнокод #19844 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
#!/usr/bin/env python

from sys import argv
from pymongo import MongoClient

conn = MongoClient('127.0.0.1', 27017)
base = conn.xmldata

try:
    from lxml import etree
except ImportError:
    import xml.etree.ElementTree as etree

def parse_xml(filename):
    tree  = etree.parse(filename)
    root  = tree.getroot()
    cntr  = root.getchildren()

    for country in cntr:
        data_struct = {}
        data_struct['name'] = country.attrib['name']
        for key in ['rank', 'year', 'gdppc']:
            value = country.find(key).text
            data_struct[key] = value

        neighbors = []
        for row in country.iter('neighbor'):
            neighbor = {}
            neighbor['name']      = row.attrib['name']
            neighbor['direction'] = row.attrib['direction']
            neighbors.append(neighbor)

        data_struct['neighbors'] = neighbors

        insert_data("country", data_struct)

def insert_data(collection, data_struct):
    coll = base[collection]
    try:
        coll.insert_one(data_struct)
    except Exception as e:
        raise

filename = argv[1]
parse_xml(filename)

Python учЮ... говно?

Запостил: rds rds, (Updated )

Комментарии (20) RSS

  • перед строко1 44 воткни проверку на __main__
    а так нормально
    Ответить
    • но даже для одноразового скрипта он выглядит симпатично

      все таки пайтон хороший скриптовый язык, небольшие скрипты на нем всегда чистые и аккуратные
      Ответить
      • Да, как-то он выделяется из прочих наглядностью. И механизмы обработки структур данных у него очень простые и понятные.
        Ответить
  • в согласии с предыдущим оратором:
    - строки 44-45 выделите в def main()
    - в конце скрипта
    if __name__ == '__main__': 
        main()

    - на всякий пожарный, я б добавил проверку на аргумент, есть он или нет
    - не работал с монгой из питона, но в 38й строке, если в base нет collection все ли будет нормально?
    Ответить
    • Не очень понял - как это в base нет collection? А данные куда вставлять?
      Ответить
    • Блин, проглядел. raise Atom автоматом вставляет
      Ответить
        • не знаю... как то привык к атому. надо будет как-нить на досуге приведённый сабж попробовать
          Ответить
  • insert в методе parse както ниочень
    mongo поддерживает batch insert, лучше все документы сохранять одним риквестом
    Ответить
    • А если файл большой? По - поводу Insert-а принято...
      Ответить
      • Тогда и xml парсать лучше чемто на колбеках
        Ответить
  • Все такие умники, а в чём говнокод? Ну да, одноразовый скрипт. Вы каждый скрипт пишите как в палату мер и весов?
    Ответить
    • Повторение рождает привычку, привычка поведение. Годное поведение уменьшает шанс помереть от голода с переломанными пальцами.
      Ответить
      • Ну ахуеть теперь. А бряк на бросок исключения без этого никак?
        Ответить
        • > бряк на бросок исключения
          В питоне то, где их бросают на каждый чих? "Ааааа, массив кончился, всё пиздец исключение"

          З.Ы. Или ты предлагаешь по бектрейсу найти кто кинул и туда бряк поставить?
          Ответить
          • Ты тупишь. Бряк на непойманное исключение брошенное из функции.

            >Или ты предлагаешь по бектрейсу найти кто кинул и туда бряк поставить?
            Такое кстати есть.
            Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8