Форум сайта python.su
Доброго всем времени суток!
Прошу помочь разобраться.
Суть задачи такова: есть log.txt содержащий в себе данные по последнему бэкапу базы данных. Ежедневно “специально обученный человек” открывает лог, копирует оттуда строчку типа “ггггммддччммсс” и вставляет скопированные данные в журнал Excel, где уже формулы заполняют другие поля по этим данным.
Чтобы этот СОЧ не занимался всякой фигнёй, было принято решение написания скриптика для автоматической записи из логов в журнал, но в ходе выполнения возникла проблема - как найти последнюю пустую строку и записать в неё все необходимы данные не перевернув?
Запутался совсем в этих чтениях и записях, не смог самостоятельно разобраться в соответствии с теми примерами, что удалось найти в интернетах. Помогите пожалуйста.
Вот что получилось:
# -*- coding: utf-8 -*- import re, xlrd, xlwt from xlutils.copy import copy md = open('c:/Tmp/test/log.txt', 'r') def Seach(md): reline = re.compile(r'^201\d[0-1]\d[0-3]\d') for line in md: m = reline.match(line) if m: return line genr = Seach(md) readbook = xlrd.open_workbook(r"C:/Tmp/test/jour2.xls", on_demand=True, formatting_info=True) readsheet = readbook.sheet_by_index(0) writebook = copy(readbook) writesheet = writebook.get_sheet(0) for ii in range(readsheet.nrows): if readsheet.cell_value(ii,0) is "": writesheet.write(ii, 0, "Yum!") writebook.save('c:/Tmp/test/jour2.xls')
Отредактировано Deocrit (Июнь 20, 2013 13:49:04)
Офлайн
Всем спасибо! Разобрался! XD
Оставлю готовый код, может кому-нибудь из таких же новичков когда-нибудь поможет.
import re, xlrd, xlwt from xlutils.copy import copy md = open('c:/Tmp/test/log.txt', 'r') # Путь к логам # Функция, создающая фильтр и применяющая его для поиска файле лога def Seach(md): reline = re.compile(r'^201\d[0-1]\d[0-3]\d') for line in md: m = reline.match(line) if m: return line genr = Seach(md) # Открываем эксельник, в который будет производиться запись, делаем его копию для редактирования readbook = xlrd.open_workbook(r"C:/Tmp/test/jour2.xls", on_demand=True, formatting_info=True) readsheet = readbook.sheet_by_index(0) # Указание на индекс листа книги. writebook = copy(readbook) writesheet = writebook.get_sheet(0) # Указание на индекс листа книги. # Устанавливаем перенос по словам, выравнивание alignment = xlwt.Alignment() alignment.wrap = 1 alignment.horz = xlwt.Alignment.HORZ_CENTER # May be: HORZ_GENERAL, HORZ_LEFT, HORZ_CENTER, HORZ_RIGHT, HORZ_FILLED, HORZ_JUSTIFIED, HORZ_CENTER_ACROSS_SEL, HORZ_DISTRIBUTED alignment.vert = xlwt.Alignment.VERT_CENTER # May be: VERT_TOP, VERT_CENTER, VERT_BOTTOM, VERT_JUSTIFIED, VERT_DISTRIBUTED # Устанавливаем шрифт font = xlwt.Font() font.name = 'Arial Cyr' font.bold = True # Устанавливаем границы borders = xlwt.Borders() borders.left = xlwt.Borders.THIN # May be: NO_LINE, THIN, MEDIUM, DASHED, DOTTED, THICK, DOUBLE, HAIR, MEDIUM_DASHED, THIN_DASH_DOTTED, MEDIUM_DASH_DOTTED, THIN_DASH_DOT_DOTTED, MEDIUM_DASH_DOT_DOTTED, SLANTED_MEDIUM_DASH_DOTTED, or 0x00 through 0x0D. borders.right = xlwt.Borders.THIN borders.top = xlwt.Borders.THIN borders.bottom = xlwt.Borders.THIN # Создаём стиль с нашими установками style = xlwt.XFStyle() style.font = font style.alignment = alignment style.borders = borders # Задаём цикл поиска первой пустой строки и записи в неё нужных нам данных for ii in range(readsheet.nrows): # по всем ФОРМАТИРОВАННЫМ строкам. Я просто с самого начала выделил нужные мне столбцы и обрамил их. =) if readsheet.cell_type(ii, 0) in (xlrd.XL_CELL_EMPTY, xlrd.XL_CELL_BLANK): print writesheet.write(ii, 0, int(readsheet.cell_value(ii - 1, 0))+1, style) writesheet.write(ii, 1, readsheet.cell_value(ii - 1, 1), style) writesheet.write(ii, 2, str(genr[6:8])+"."+str(genr[4:6])+"."+str(genr[:4]), style) writesheet.write(ii, 3, str(genr[8:10])+":"+str(genr[10:12])+":"+str(genr[12:14]), style) writesheet.write(ii, 4, readsheet.cell_value(ii - 1, 4), style) writesheet.write(ii, 5, readsheet.cell_value(ii - 1, 5), style) writesheet.write(ii, 6, readsheet.cell_value(ii - 5, 6), style) writesheet.write(ii, 7, readsheet.cell_value(ii - 1, 7), style) writesheet.write(ii, 8, readsheet.cell_value(ii - 1, 8), style) break md.close() # Закрываем открытый файл лог readbook.release_resources() # Освобождаем наш эксельник от чтения writebook.save('c:/Tmp/test/jour2.xls') # Перезаписываем наш эксельник
Офлайн
Спасибо добрый человек!
Офлайн