Как выполнить запись в электронную таблицу Excel с помощью Python?
Мне нужно записать некоторые данные из моей программы в электронную таблицу Excel. Я поискал в Интернете, и, похоже, доступно много пакетов (xlwt, XlsXcessive, openpyxl). Другие предлагают выполнять запись в файл .csv (никогда не использовал CSV и на самом деле не понимаю, что это такое).
Программа очень проста. У меня есть два списка (с плавающей точкой) и три переменные (строки). Я не знаю длины двух списков, и они, вероятно, не будут одинаковой длины.
Я хочу, чтобы макет был таким, как на рисунке ниже:
Розовый столбец будет содержать значения из первого списка, а зеленый столбец будет содержать значения из второго списка.
Итак, какой лучший способ сделать это?
Я использую Windows 7, но у меня не обязательно будет установлен Office на компьютерах, на которых запущена эта программа.
import xlwt
x=1
y=2
z=3
list1=[2.34,4.346,4.234]
book = xlwt.Workbook(encoding="utf-8")
sheet1 = book.add_sheet("Sheet 1")
sheet1.write(0, 0, "Display")
sheet1.write(1, 0, "Dominance")
sheet1.write(2, 0, "Test")
sheet1.write(0, 1, x)
sheet1.write(1, 1, y)
sheet1.write(2, 1, z)
sheet1.write(4, 0, "Stimulus Time")
sheet1.write(4, 1, "Reaction Time")
i=4
for n in list1:
i = i+1
sheet1.write(i, 0, n)
book.save("trial.xls")
Я написал это, используя все ваши предложения. Работа выполнена, но ее можно немного улучшить.
Как мне отформатировать ячейки, созданные в цикле for (list1
значения), как scientific или number?
Я не хочу усекать значения. Фактические значения, используемые в программе, будут содержать около 10 цифр после запятой.
Переведено автоматически
Ответ 1
Используйте DataFrame.to_excel из pandas. Pandas позволяет вам представлять ваши данные в функционально насыщенных структурах данных, а также позволяет вам читать в файлах Excel.
Сначала вам нужно будет преобразовать ваши данные в DataFrame, а затем сохранить их в файл Excel следующим образом:
In [1]: from pandas import DataFrame
In [2]: l1 = [1,2,3,4]
In [3]: l2 = [1,2,3,4]
In [3]: df = DataFrame({'Stimulus Time': l1, 'Reaction Time': l2})
In [4]: df
Out[4]:
Reaction Time Stimulus Time
0 1 1
1 2 2
2 3 3
3 4 4
In [5]: df.to_excel('test.xlsx', sheet_name='sheet1', index=False)
и полученный файл Excel выглядит следующим образом:
Обратите внимание, что оба списка должны быть одинаковой длины, иначе pandas будут жаловаться. Чтобы решить эту проблему, замените все пропущенные значения на None
.
Ответ 2
import xlwt
def output(filename, sheet, list1, list2, x, y, z):
book = xlwt.Workbook()
sh = book.add_sheet(sheet)
variables = [x, y, z]
x_desc = 'Display'
y_desc = 'Dominance'
z_desc = 'Test'
desc = [x_desc, y_desc, z_desc]
col1_name = 'Stimulus Time'
col2_name = 'Reaction Time'
#You may need to group the variables together
#for n, (v_desc, v) in enumerate(zip(desc, variables)):
for n, v_desc, v in enumerate(zip(desc, variables)):
sh.write(n, 0, v_desc)
sh.write(n, 1, v)
n+=1
sh.write(n, 0, col1_name)
sh.write(n, 1, col2_name)
for m, e1 in enumerate(list1, n+1):
sh.write(m, 0, e1)
for m, e2 in enumerate(list2, n+1):
sh.write(m, 1, e2)
book.save(filename)
для получения дополнительных пояснений:
https://github.com/python-excel
Ответ 3
xlrd / xlwt (стандарт): Python не имеет такой функциональности в своей стандартной библиотеке, но я думаю о xlrd / xlwt как о "стандартном" способе чтения и записи файлов Excel. Создать рабочую книгу, добавлять листы, записывать данные / формулы и форматировать ячейки довольно просто. Если вам нужно все это, вы можете добиться наибольшего успеха с помощью этой библиотеки. Я думаю, вы могли бы выбрать вместо этого openpyxl, и это было бы очень похоже, но я им не пользовался.
Чтобы отформатировать ячейки с помощью xlwt, определите a
XFStyle
и включите стиль при записи на лист. Вот пример со многими числовыми форматами. Смотрите пример кода ниже.Tablib (мощный, интуитивно понятный): Tablib - это более мощная, но интуитивно понятная библиотека для работы с табличными данными. С его помощью можно создавать книги Excel с несколькими листами, а также в других форматах, таких как csv, json и yaml. Если вам не нужны форматированные ячейки (например, цвет фона), вы окажете себе услугу, воспользовавшись этой библиотекой, которая в долгосрочной перспективе продвинет вас дальше.
csv (легко): файлы на вашем компьютере могут быть как текстовыми, так и двоичными. Текстовые файлы - это просто символы, включая специальные, такие как перевод строки и табуляция, и их можно легко открыть где угодно (например, в блокноте, вашем веб-браузере или продуктах Office). CSV-файл - это текстовый файл, который отформатирован определенным образом: каждая строка представляет собой список значений, разделенных запятыми. Программы на Python могут легко читать и записывать текст, поэтому csv-файл - это самый простой и быстрый способ экспортировать данные из вашей программы на Python в Excel (или другую программу на python).
Файлы Excel являются двоичными и требуют специальных библиотек, которые знают формат файла, поэтому для их чтения / записи вам понадобится дополнительная библиотека для python или специальная программа, такая как Microsoft Excel, Gnumeric или LibreOffice.
import xlwt
style = xlwt.XFStyle()
style.num_format_str = '0.00E+00'
...
for i,n in enumerate(list1):
sheet1.write(i, 0, n, fmt)
Ответ 4
import xlsxwriter
# Create an new Excel file and add a worksheet.
workbook = xlsxwriter.Workbook('demo.xlsx')
worksheet = workbook.add_worksheet()
# Widen the first column to make the text clearer.
worksheet.set_column('A:A', 20)
# Add a bold format to use to highlight cells.
bold = workbook.add_format({'bold': True})
# Write some simple text.
worksheet.write('A1', 'Hello')
# Text with formatting.
worksheet.write('A2', 'World', bold)
# Write some numbers, with row/column notation.
worksheet.write(2, 0, 123)
worksheet.write(3, 0, 123.456)
# Insert an image.
worksheet.insert_image('B5', 'logo.png')
workbook.close()