Блог им. SciFi
26.05.2017;23:41:05;BR-6.17;Продажа;52,18;13;382208 29.05.2017;11:20:21;BR-7.17;Продажа;52,44;13;384112 29.05.2017;11:20:29;ED-6.17;Купля;1,1194;5;315361 29.05.2017;12:58:30;ED-6.17;Продажа;1,1198;5;315473 29.05.2017;11:16:23;GOLD-6.17;Продажа;1268,0;5;357225 29.05.2017;12:58:53;GOLD-6.17;Купля;1269,0;5;357506 29.05.2017;11:15:18;RTS-6.17;Продажа;107500,0;3;363422 29.05.2017;12:59:15;RTS-6.17;Купля;107480,0;3;363354Формат можете откорректировать под себя. Такие строки затем очень легко вставляются в Excel или Google spreadsheets, которыми я пользуюсь, через импорт.
# Copyright SciFi, 2017 # -*- coding: utf-8 -*- import xml.etree.ElementTree as ET from datetime import datetime # Создаем файл, в который будем писать, открываем его с правами на запись f = open('result.txt', 'w') # Считываем файл отчета report.xml и парсим его tree = ET.parse('report.xml') root = tree.getroot() common_deal = root.find('common_deal') prev_date = '' prev_price = 0 total_quantity = 0 # Массив строк lines = [] # Проходимся по всем сделкам и суммируем их, мелкие сделки затем удаляем, суммарные сделки сохраняем в массив lines for child in common_deal: deal_date = child.get('deal_date') security_code = child.get('security_code') deal_symbol = child.get('deal_symbol') price = child.get('price') roundto = child.get('roundto') quantity = int(child.get('quantity')) price_rur = child.get('price_rur') # Сделка считается мелкой сделкой в составе крупной, если совпадают даты и код инструмента if deal_date == prev_date and security_code == prev_security_code : total_quantity = total_quantity + quantity # Удаление строки с мелкой сделкой из массива lines.pop() else : total_quantity = quantity # Форматирование данных для строки price_round = round(float(price), int(roundto)) if deal_symbol == 'B': deal_symbol = 'Купля' else : deal_symbol = 'Продажа' volume = float(price_rur) * total_quantity volume_string = '%.f' % volume datetime_object = datetime.strptime(deal_date, '%Y-%m-%dT%H:%M:%S') date_string = datetime_object.strftime('%d.%m.%Y') time_string = datetime_object.strftime('%H:%M:%S') price_string = str(price_round) price_string = price_string.replace('.',',') quantity_string = str(total_quantity) # Формирование строки line = date_string + ';' \ + time_string + ';' \ + security_code + ';' \ + deal_symbol + ';' \ + price_string + ';' \ + quantity_string + ';'\ + volume_string \ + '\n' # Добавление строки в массив print line lines.append(line) prev_date = deal_date prev_security_code = security_code # Запись строк в файл f.writelines(lines)