写入Excel电子表格

Jey*_*Jey 132 python csv excel

我是Python的新手.我需要将程序中的一些数据写入电子表格.我在网上搜索过,似乎有很多可用的软件包(xlwt,XlsXcessive,openpyxl).其他人建议写一个.csv文件(从未使用过的CSV,并不真正理解它是什么).

该计划非常简单.我有两个列表(浮点数)和三个变量(字符串).我不知道两个列表的长度,它们的长度可能不一样.

我希望布局如下图所示:

布局样本

粉色列将具有第一个列表的值,绿色列将具有第二个列表的值.

那么最好的方法是什么?

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")
Run Code Online (Sandbox Code Playgroud)

我用你所有的建议写了这个.它完成了工作,但可以略微改进.

如何将for循环中创建的单元格(list1值)格式化为科学或数字?

我不想截断这些值.程序中使用的实际值在小数点后大约为10位数.

dil*_*iop 124

pandas使用DataFrame.to_excel.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)
Run Code Online (Sandbox Code Playgroud)

并且出来的excel文件看起来像这样:

在此输入图像描述

请注意,两个列表必须具有相同的长度,否则大熊猫会抱怨.要解决此问题,请使用替换所有缺失值None.

  • 我假设它也使用了`xlwt`,但是出现了'openpyxl`错误.对于那些因此而感到困惑的人 - 它都是你想要的文件类型.pandas(0.12)文档说"带有`.xls`扩展名的文件将使用xlwt编写,带有`.xlsx`扩展名的文件将使用openpyxl编写". (6认同)
  • 不知道为什么人们说它有点矫枉过正.就我的目的而言,这正是我所寻求的.谢谢! (4认同)
  • 非常肯定pandas使用xlrd/xlwt库来实现其excel功能http://pandas.pydata.org/pandas-docs/stable/io.html#excel-files (2认同)

thk*_*ang 86

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)
Run Code Online (Sandbox Code Playgroud)

有关更多说明:https: //github.com/python-excel

  • 您可能要提一下,如果您在Windows上运行Python并在同一台计算机上安装了Excel,则可以使用Python COM接口直接控制Excel. (12认同)
  • 需要明确的是,“xlwt”仅用于为 Excel 2003 或更早版本编写旧的“.xls”文件。这可能已经过时(取决于您的需要)。 (3认同)
  • 请注意,使用此代码,最大行限制为65536行,因为.xls文件仅支持那么多行 (2认同)

jmi*_*loy 33

  • xlrd/xlwt(标准):Python在其标准库中没有此功能,但我认为xlrd/xlwt是读取和写入excel文件的"标准"方式.制作工作簿,添加工作表,编写数据/公式以及格式化单元格相当容易.如果您需要所有这些东西,那么您可以在此库中取得最大成功.我认为你可以选择openpyxl而且它会非常相似,但我还没有使用它.

    要使用xlwt格式化单元格,请XFStyle在写入工作表时定义并包含样式.这是一个包含许多数字格式的示例.请参阅下面的示例代码

  • Tablib(功能强大,直观):Tablib是一个功能更强大但更直观的库,用于处理表格数据.它可以编写具有多个工作表以及其他格式的excel工作簿,例如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)
Run Code Online (Sandbox Code Playgroud)

  • 如果您要编写CSV文件,可能需要使用标准库中包含的[csv模块](http://docs.python.org/3/library/csv.html). (2认同)

2 8*_*2 8 10

CSV代表逗号分隔值.CSV就像一个文本文件,只需添加.CSV扩展名即可创建

例如写下这段代码:

f = open('example.csv','w')
f.write("display,variable x")
f.close()
Run Code Online (Sandbox Code Playgroud)

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

  • 您无法使用CSV格式化列背景.它只是导入和导出的数据格式. (5认同)
  • 您可能想要使用标准库中包含的[csv模块](http://docs.python.org/3/library/csv.html),如果您要这样做的话.例如,它可以更好地处理报价. (4认同)

小智 9

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()
Run Code Online (Sandbox Code Playgroud)


Jos*_*ush 9

xlsxwriter库非常适合创建.xlsx文件。以下代码片段.xlsx从字典列表生成一个文件,同时说明顺序显示的名称

\n
from xlsxwriter import Workbook\n\n\ndef create_xlsx_file(file_path: str, headers: dict, items: list):\n    with Workbook(file_path) as workbook:\n        worksheet = workbook.add_worksheet()\n        worksheet.write_row(row=0, col=0, data=headers.values())\n        header_keys = list(headers.keys())\n        for index, item in enumerate(items):\n            row = map(lambda field_id: item.get(field_id, \'\'), header_keys)\n            worksheet.write_row(row=index + 1, col=0, data=row)\n\n\nheaders = {\n    \'id\': \'User Id\',\n    \'name\': \'Full Name\',\n    \'rating\': \'Rating\',\n}\n\nitems = [\n    {\'id\': 1, \'name\': "Ilir Meta", \'rating\': 0.06},\n    {\'id\': 2, \'name\': "Abdelmadjid Tebboune", \'rating\': 4.0},\n    {\'id\': 3, \'name\': "Alexander Lukashenko", \'rating\': 3.1},\n    {\'id\': 4, \'name\': "Miguel D\xc3\xadaz-Canel", \'rating\': 0.32}\n]\n\ncreate_xlsx_file("my-xlsx-file.xlsx", headers, items)\n
Run Code Online (Sandbox Code Playgroud)\n

在此输入图像描述

\n
\n
\n

注 1 - 我故意不回答 OP 提出的确切案例。相反,我提出的是大多数访问者寻求的更通用的解决方案。该问题的标题在搜索引擎中索引良好,并跟踪大量流量

\n

在此输入图像描述

\n

注 2 - 如果您不使用Python3.6 或更高版本,请考虑使用OrderedDictin headers。Python3.6之前的顺序在dict在Python3.6之前,不保留

\n
\n
\n


Al *_*art 7

我调查了一些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')
Run Code Online (Sandbox Code Playgroud)


ehr*_*emo 6

尝试查看以下库:

xlwings - 用于从Python获取数据进出电子表格,以及操作工作簿和图表

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