Имею на входе файл import.txt. Выложу его кусочек. Он представляет из себя импорт в текстовый файл ,значения которого разделены запятыми.
Пример строки из файла
394409,7005,20-04-2014-19-42,962СОТ,7416311,2,1,6.40,1367,,СОТОВАЯ,
1. номер заказа (не нужен)
2. 7005 номер телефона (может быть один и более принадлежит лицевому счету вместе с другими номерами, за день абонент может позвонить много раз или вообще не звонить)
3. дата звонка
4. код направления
5. номер куда звонили
6. длина разговора
7. количество звонков почему то всегда 1
8 сумма за заказ
9 лицевой счет (по которому нужно создавать файлы экзель например 1367.xls, название оранизации приходится брать из файла шаблона)
10 название направления
Из этого файла получился список spisok_obshiy_otsortirovaniy, в котором значения отсортированы по лицевым счетам, далее по номерам, далее по датам.
Как мне из всего этого получить множество файлов, в каждом из которых будут записаны данные конкретно по одному лицевому счету и принадлежащих ему номерах? С форматированием страниц я сам разберусь, а вот логику программы не осилил еще как дописать дальше.
# coding: utf8 import re import sys import xlwt from xlwt import Workbook,easyxf from xlrd import open_workbook,XL_CELL_TEXT, cellname from tempfile import TemporaryFile """Шаблон цеха""" book_shablon_ceha = open_workbook('ceha_shablon.xls') ceha_shablon = book_shablon_ceha.sheet_by_index(0) """Шаблон подряд""" book_shablon_podryad = open_workbook('podryad_shablon.xls') podryad_shablon = book_shablon_podryad.sheet_by_index(0) """Файл цехов на запись""" book_ceha = xlwt.Workbook('utf8') ceha = book_ceha.add_sheet('Отчет по цехам') """Файл подрядных на запись""" book_podryad = xlwt.Workbook('utf8') podryad = book_podryad.add_sheet('Отчет по подрядным') """Фонты""" font_red = xlwt.easyxf('font: height 240,name Times New Roman,colour_index black, bold off,italic off; align: wrap on, vert top, horiz left;pattern: pattern solid, fore_colour white;border: right thin,left thin,top thin,bottom thin;') font_blue = xlwt.easyxf('font: height 240,name Times New Roman,colour_index black, bold off,italic off; align: wrap on, vert top, horiz left;pattern: pattern solid, fore_colour white;border: right thin,left thin,top thin,bottom thin;') font_green = xlwt.easyxf('font: height 240,name Times New Roman,colour_index black, bold off,italic off; align: wrap on, vert top, horiz left;pattern: pattern solid, fore_colour white;border: right thin,left thin,top thin,bottom thin;') font_400 = xlwt.easyxf('font: height 300,name Times New Roman,colour_index black, bold off,italic off; align: wrap on, vert top, horiz left;pattern: pattern solid, fore_colour white;border: right thin,left thin,top thin,bottom thin;') font_240_i = xlwt.easyxf('font: height 240,name Times New Roman,colour_index black, bold off,italic off; align: wrap on, vert top, horiz left;pattern: pattern solid, fore_colour white;border: right thin,left thin,top thin,bottom thin;') bez_border = xlwt.easyxf('font: height 240,name Times New Roman,colour_index black, bold off,italic off; align: wrap on, vert top, horiz left;pattern: pattern solid, fore_colour white;') left_border = xlwt.easyxf('font: height 240,name Times New Roman,colour_index black, bold off,italic off; align: wrap on, vert top, horiz left;pattern: pattern solid, fore_colour white;border:left thin;') right_border = xlwt.easyxf('font: height 240,name Times New Roman,colour_index black, bold off,italic off; align: wrap on, vert top, horiz left;pattern: pattern solid, fore_colour white;border: right thin;') verh_border = xlwt.easyxf('font: height 240,name Times New Roman,colour_index black, bold off,italic off; align: wrap on, vert top, horiz left;pattern: pattern solid, fore_colour white;border: top thin;') niz_border = xlwt.easyxf('font: height 240,name Times New Roman,colour_index black, bold off,italic off; align: wrap on, vert top, horiz left;pattern: pattern solid, fore_colour white;border: bottom thin;') niz_left = xlwt.easyxf('font: height 240,name Times New Roman,colour_index black, bold off,italic off; align: wrap on, vert top, horiz left;pattern: pattern solid, fore_colour white;border: bottom thin,left thin;') niz_right = xlwt.easyxf('font: height 240,name Times New Roman,colour_index black, bold off,italic off; align: wrap on, vert top, horiz left;pattern: pattern solid, fore_colour white;border: bottom thin,right thin;') verh_left = xlwt.easyxf('font: height 240,name Times New Roman,colour_index black, bold off,italic off; align: wrap on, vert top, horiz left;pattern: pattern solid, fore_colour white;border: top thin,left thin;') verh_right = xlwt.easyxf('font: height 240,name Times New Roman,colour_index black, bold off,italic off; align: wrap on, vert top, horiz left;pattern: pattern solid, fore_colour white;border: top thin,right thin;') l = easyxf('border: right thin,left thin,top thin,bottom thin') """ Создаем пустой словарь""" slovar_iz_shablona_ceha = {}#словарь лицевых счетов и названий цехов slovar_iz_shablona_podryad = {}#словарь лицевых счетов и названий подрядных организаций spisok_obshiy_otsortirovaniy = [] slovar_otchet_ceha = {} """"Прочитали столбик 1 (с 1 до 100) ячейки, загнали в список и отсортировали список """ nomer_pervoy_yacheyki_shablona_ceha = 0 #тут уже не менять nomer_posledney_yacheyki_shablona_ceha = 100#это последняя ячейка шаблона в цехе с данными for iterator_schetov_ceha in range(nomer_pervoy_yacheyki_shablona_ceha,nomer_posledney_yacheyki_shablona_ceha): lic_shet_shablon_v_slovar = int(ceha_shablon.cell(iterator_schetov_ceha,0).value) naz_org_shablon_v_slovar = (ceha_shablon.cell(iterator_schetov_ceha,1).value) slovar_iz_shablona_ceha[lic_shet_shablon_v_slovar] = naz_org_shablon_v_slovar """"Прочитали столбик 1 (с 0 до 31) ячейки, загнали в список и отсортировали список """ nomer_pervoy_yacheyki_shablona_podryad = 0 #тут уже не менять nomer_posledney_yacheyki_shablona_podryad = 31#это последняя ячейка шаблона в цехе с данными for iterator_schetov_podryad in range(nomer_pervoy_yacheyki_shablona_podryad,nomer_posledney_yacheyki_shablona_podryad): lic_shet_shablon_podryad_v_slovar = int(podryad_shablon.cell(iterator_schetov_podryad,0).value) naz_org_shablon_podryad_v_slovar = (podryad_shablon.cell(iterator_schetov_podryad,1).value) slovar_iz_shablona_podryad[lic_shet_shablon_podryad_v_slovar] = naz_org_shablon_v_slovar for line in open(r'import.txt'): shablon = line.split(',') #print shablon data = shablon[2][0:10] vremya = shablon[2][11:16] summa = float(shablon[7]) nomer_telefona = int(shablon[1]) lic_schet = int(shablon[8]) kod = shablon[3].decode('cp866') nomer = int(shablon[4]) dlina_razgovora = int(shablon[5]) napravlenie = shablon[10].decode('cp866') naz_org_ceha = slovar_iz_shablona_ceha[lic_schet] if data and summa and nomer_telefona and lic_schet and nomer and kod and napravlenie and vremya and dlina_razgovora: spisok_obshiy_otsortirovaniy.append([lic_schet,nomer_telefona,naz_org_ceha,data, vremya,kod,nomer, napravlenie, dlina_razgovora,summa]) spisok_obshiy_otsortirovaniy.sort(key = lambda x: (x[0], x[1],x[3],x[4])) print spisok_obshiy_otsortirovaniy """ceha.write(stroka, 0,spisok[0],font_400) ceha.write(stroka, 1, spisok[1], font_240_i) book_ceha.save(ceha_nazvanie_faila) book_ceha.save(TemporaryFile())"""
Оч надо. Как выбрать из списка все звонки с одного телефона и суммировать его суммы за разговор?