Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2020, 16:27   #1
artems67
Пользователь
 
Регистрация: 17.11.2015
Сообщений: 62
Восклицание Не добавляет две последние записи в словарь

Короче, нужно распарсить xml файл, достать оттуда только некоторые сведенья, идентификатор человека, и его ФИО соответственно.

На первом этапе парсится файл без всяких проблем:

Код:
''' Кусок кода '''
        self.parseXML(filePath) # Тут выполняю парсинг нужного мне файла через метод класса
        # Для проверки в цикле вывожу результат парсинга, вывожу только нужно мне поле из картежа
        # Картеж хранит словари 
        for elem in self.outputData:
            if 'ID_PAC' in elem: 
                print(elem)
        ''' Продолжение кода программы '''
Вывод в консоль, как видите в конце две записи с большими числами:



Далее во втором этапе исполняется следующий код:

Код:
 '''
        Тут я из полученного распарсиного файла достаю только 
        нужные мне сведенья прохожу в цикле по картежу из словарей
        компаную их в словари с 4 ключами, а потом добавляю словарь в картеж.
        Делаю это для удобства вывода в файл, можно было реализовать и по другому наверное.
        Но я остановился на этом.
        '''
        for index in range(len(self.outputData)):
            if 'ID_PAC' in self.outputData[index]:
                element_dic = self.outputData[index]
                dic.update(element_dic)
            if 'FAM' in self.outputData[index]:
                element_dic = self.outputData[index]
                dic.update(element_dic)
            if 'IM' in self.outputData[index]:
                element_dic = self.outputData[index]
                dic.update(element_dic)
            if 'OT' in self.outputData[index]:
                element_dic = self.outputData[index]
                dic.update(element_dic)
            if len(dic) == 4:
                self.errorsData.append(dic)
                dic = {}
Ну и для теста я вывожу полученный картеж на экран:

Код:
for elem in self.errorsData:
                print(elem)
Вот собственно и проблема на рисунке ниже, почему то пропадают две последних записи с большими числами (айдишниками) и записей становится не 65, как изначально должно быть, а 63. Почему эти две последние записи съедаются питоном? Может я что-то не правильно делаю?

artems67 вне форума Ответить с цитированием
Старый 28.12.2020, 18:01   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Предположу, что для записей с большими ID не выполняется условие "if len(dic) == 4:".
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 28.12.2020, 18:14   #3
artems67
Пользователь
 
Регистрация: 17.11.2015
Сообщений: 62
По умолчанию

Спасибо, пробежался глазами ещё раз по разметке исходного файла .xml и увидел что у людей с большими номерами тэги отличаются, стоят FAM_P, IM_P, OT_P и соответственно в dic заносилась только одна запись и условие не выполнялась.

Проблема решена.
artems67 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поменять местами последние две строки eko_knopka C# (си шарп) 3 05.10.2017 09:34
Исчезли последние записи в базе Access Dux Работа с сетью в Delphi 7 15.10.2013 17:00
Как обновить последние записи за определенный срок не обновляя не законченные записи? SotGEGDS SQL, базы данных 3 11.06.2013 14:39
Редактор TinyMCE. Эта гадость добавляет две точки dem66 JavaScript, Ajax 1 22.03.2012 21:29
Запрос на последние записи SERG1980 БД в Delphi 5 17.11.2010 17:02