1. Python / Говнокод #19844

    −49

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 19 Апреля 2016

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

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

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

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

      Смысл?
      Ответить
      • брекпоинт ставить
        Ответить
        • Ну ахуеть теперь. А бряк на бросок исключения без этого никак?
          Ответить
          • > бряк на бросок исключения
            В питоне то, где их бросают на каждый чих? "Ааааа, массив кончился, всё пиздец исключение"

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

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

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