Python, добавление печатного вывода в файл Excel

Я надеялся, что кто-то сможет указать мне правильное направление или привести пример того, как я могу поместить следующий вывод сценария в электронную таблицу Excel, используя xlwt. Мой сценарий выводит следующий текст на экран по мере необходимости, однако я надеялся поместить этот вывод в Excel в два столбца времени и значения. Вот печатный вывод..

07:16:33.354    1

07:16:33.359    1

07:16:33.364    1

07:16:33.368    1

Мой сценарий ниже.

import re

f = open("C:\Results\16.txt", "r")
searchlines = f.readlines()
searchstrings = ['Indicator']
timestampline = None
timestamp = None
f.close()
a = 0
tot = 0

while a<len(searchstrings):
    for i, line in enumerate(searchlines):
        for word in searchstrings:
            if word in line:
                timestampline = searchlines[i-33]
                for l in searchlines[i:i+1]: #print timestampline,l,
                #print
                    for i in line:
                        str = timestampline
                        match = re.search(r'\d{2}:\d{2}:\d{2}.\d{3}', str)
                        if match:
                            value = line.split()
                            print '\t',match.group(),'\t',value[5],
                            print
                            print
                            tot = tot+1
                            break

    print 'total count for', '"',searchstrings[a],'"', 'is', tot
    tot = 0
    a = a+1

У меня было несколько попыток с использованием xlwt или CSV Writer, но каждый раз, когда я врезался в стену, возвращался к моему сценарию и пытался снова. Я надеюсь напечатать match.group() и значение [5] в двух разных столбцах на листе Excel.

Спасибо за ваше время...

MikG

1 ответ

Решение

Какие у вас проблемы с xlwt? Лично я нахожу это очень простым в использовании, помня основной рабочий процесс:

  1. import xlwt

  2. создайте свою электронную таблицу, используя, например.

    my_xls=xlwt.Workbook(encoding=your_char_encoding),

    который возвращает ваш дескриптор электронной таблицы, чтобы использовать для добавления листов и сохранения всего файла

  3. добавить лист в созданную таблицу с помощью, например.

    my_sheet=my_xls.add_sheet("sheet name")

  4. Теперь, имея объект листа, вы можете писать в его ячейках, используя sheet_name.write(строка, столбец, значение):

    my_sheet.write(0,0,"First column title") my sheet.write(0,1,"Second column title")

  5. Сохраните все, используя электронную таблицу.save('имя_файла.xls')

    my_xls.save("results.txt")

Это самый простой из рабочих примеров; Ваш код должен, конечно, использовать sheet.write(строка, столбец, значение) в данных циклической печати, например:

import re
import xlwt

f = open("C:\Results\VAMOS_RxQual_Build_Update_Fri_04-11.08-16.txt", "r")    
searchlines = f.readlines()
searchstrings = ['TSC Set 2 Indicator']
timestampline = None
timestamp = None
f.close()
a = 0
tot = 0

my_xls=xlwt.Workbook(encoding="utf-8") # begin your whole mighty xls thing
my_sheet=my_xls.add_sheet("Results")   # add a sheet to it

row_num=0 # let it be current row number
my_sheet.write(row_num,0,"match.group()") # here go column headers, 
my_sheet.write(row_num,1,"value[5]")      # change it to your needs
row_num+=1 # let's change to next row

while a<len(searchstrings):
    for i, line in enumerate(searchlines):
        for word in searchstrings:
            if word in line:
                timestampline = searchlines[i-33]
                for l in searchlines[i:i+1]: #print timestampline,l,
                #print
                    for i in line:
                        str = timestampline
                        match = re.search(r'\d{2}:\d{2}:\d{2}.\d{3}', str)
                        if match:
                            value = line.split()
                            print '\t',match.group(),'\t',value[5],
                            # here goes cell writing:
                            my_sheet.write(row_num,0,match.group()) 
                            my_sheet.write(row_num,1,value[5])
                            row_num+=1
                            # and that's it...
                            print
                            print
                            tot = tot+1
                            break

    print 'total count for', '"',searchstrings[a],'"', 'is', tot
    tot = 0
    a = a+1
    # don't forget to save your file!
    my_xls.save("results.xls")

Улов:

  • Нативная запись даты / времени в xls была для меня кошмаром, так как Excel внутренне не хранит данные даты / времени (и я не мог их выяснить),
  • будьте осторожны с типами данных, которые вы пишете в ячейки. Для простого отчета в начале достаточно передать все в виде строки, позже вы должны найти документацию xlwt весьма полезной.

С Днем Рождения!

Другие вопросы по тегам