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
.
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
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)
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打开这个文件.
小智 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)
该xlsxwriter
库非常适合创建.xlsx
文件。以下代码片段.xlsx
从字典列表生成一个文件,同时说明顺序和显示的名称:
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 或更高版本,请考虑使用
\nOrderedDict
inheaders
。Python3.6之前的顺序在dict
在Python3.6之前,不保留
我调查了一些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)
尝试查看以下库:
xlwings - 用于从Python获取数据进出电子表格,以及操作工作簿和图表
ExcelPython - 用于在Python而不是VBA中编写用户定义函数(UDF)和宏的Excel加载项
归档时间: |
|
查看次数: |
529001 次 |
最近记录: |