Python – 写入Excel电子表格

我是Python的新手。 我需要将我的程序中的一些数据写入电子表格。 我在网上search,似乎有很多可用的包(xlwt,XlsXcessive,openpyxl)。 其他人build议写入一个csv文件(从来没有使用csv&真的不明白它是什么)。

程序非常简单。 我有两个列表(浮动)和三个variables(string)。 我不知道这两个列表的长度,他们可能不会是相同的长度。

我想要的布局如下图所示:

在这里输入图像描述

粉红色的列将具有第一列表的值,绿色列将具有第二列表的值。

那么最好的办法是什么? 谢谢。

PS我正在运行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") 

我使用你的所有build议写这个。 它完成了工作,但可以稍微改进。 如何将在for循环(list1值)中创build的单元格设置为科学或数字格式? 我不想截断这些值。 程序中使用的实际值将在十进制后有大约10位数字。

 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

使用来自pandas的 DataFrame.to_excel 。 pandas允许您在function丰富的数据结构中表示您的数据,并且可以让您读取 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会抱怨。 要解决这个问题,请将所有缺less的值replace为None

  • xlrd / xlwt (标准):Python在标准库中没有这个function,但是我认为xlrd / xlwt是读取和写入excel文件的“标准”方式。 制作工作簿,添加工作表,写入数据/公式以及格式化单元格相当简单。 如果你需要所有这些东西,你可能会在这个图书馆里获得最大的成功。 我想你可以select使用openpyxl,它会非常相似,但我没有使用它。

    要使用xlwt格式化单元格,请在写入表单时定义XFStyle并包含样式。 这是一个很多数字格式的例子 。 看下面的例子代码。

  • Tablib (function强大,直观): Tablib是用于处理表格数据的更强大而直观的库。 它可以编写多张工作簿以及其他格式,如csv,json和yaml。 如果你不需要格式化的单元格(比如背景颜色),你会自己动手使用这个库,从长远来看,这会让你走得更远。

  • csv (简单):您计算机上的文件是文本二进制文件 。 文本文件只是字符,包括诸如换行符和制表符等特殊字符,并且可以在任何地方轻松打开(例如记事本,Web浏览器或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) 
 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() 

CSV代表逗号分隔值。 CSV就像一个文本文件,可以简单地通过添加.CSV扩展名创build

例如写下这段代码:

 f = open('example.csv','w') f.write("display,variable x") f.close() 

你可以用excel打开这个文件。

试着看看下面的库:

xlwings – 用于从Python获取数据到电子表格以及操作工作簿和图表

ExcelPython – 用于在Python而不是VBA中编写用户定义函数(UDF)和macros的Excel加载项

我调查了Python的几个Excel模块,发现openpyxl是最好的。

免费的书自动化镗与Python的东西有一个关于openpyxl的一个章节有更多的细节,或者你可以检查阅读文档网站。 您将不需要安装Office或Excel以便使用openpyxl。

你的程序看起来像这样:

 import openpyxl wb = openpyxl.load_workbook('example.xlsx') sheet = wb.get_sheet_by_name('Sheet1') stimulusTimes = [1, 2, 3] reactionTimes = [2.3, 5.1, 7.0] for i in range(len(stimulusTimes)): sheet['A' + str(i + 6)].value = stimulusTimes[i] sheet['B' + str(i + 6)].value = reactionTimes[i] wb.save('example.xlsx') 

导入精确数字的最简单方法是在l1和l2中的数字之后加上一个小数。 Python将这个小数点解释为包含确切数字的指令。 如果您需要将其限制在某个小数点位置,则应该能够创build一个限制输出的打印命令,如下所示:

打印variable_example [:13]

将它限制在小数点后第十位,假设你的数据有两个小数左边的整数。