如何将 excel 中的列表逐行写入一列?
How can i write a list of list in excel to only one column row by row?
我有一个包含数据的列表列表,我想将它逐行写入一列,但是当我这样做时我的 excel 文件看起来像这样:
我希望它看起来像这样:
到目前为止,这是我的代码:
import xlsxwriter
all_list = [['aaa1','aaa2','aaa3'],
['bbb1','bbb2','bbb3'],
['ccc1','ccc2','ccc3']]
workbook = xlsxwriter.Workbook('qweqwe.xlsx')
worksheet = workbook.add_worksheet()
for row,data in enumerate(all_list):
worksheet.write_column(row,0,data)
workbook.close()
这里有几种打点的方法。
循环
将行初始化为0,并按每组数据的长度递增。
因此第一组数据将从第 0 行开始,然后下一组数据将在该行下方,依此类推。
import xlsxwriter
all_list = [['aaa1','aaa2','aaa3'],
['bbb1','bbb2','bbb3'],
['ccc1','ccc2','ccc3']]
workbook = xlsxwriter.Workbook('qweqwe.xlsx')
worksheet = workbook.add_worksheet()
row = 0
for data in all_list:
worksheet.write_column(row, 0, data)
row += len(data)
列表理解
您也可以通过 'flattening' 使用列表理解的列表列表来做到这一点。
import xlsxwriter
all_list = [['aaa1','aaa2','aaa3'],
['bbb1','bbb2','bbb3'],
['ccc1','ccc2','ccc3']]
workbook = xlsxwriter.Workbook('qweqwe.xlsx')
worksheet = workbook.add_worksheet()
data = [item for lst in all_list for item in lst]
worksheet.write_column(0, 0, data)
workbook.close()
------------------
您写的函数是worksheet.write_column(starting_row, starting_column, data)
。当您使用 for row, data in enumerate(all_list):
迭代 all_list
时,您将获得迭代:
row = 0
、data = ['aaa1','aaa2','aaa3']
row = 1
、data = ['bbb1','bbb2','bbb3']
row = 3
、data = ['ccc1','ccc2','ccc3']
因此您的起始行将依次为 0、1、2,并且您正在覆盖您已经编写的内容。
你可以用类似的东西来压平你的 all_list
:
from itertools import chain
worksheet.write_column(0, 0, chain.from_iterable(all_list))
chain.from_iterable(all_list)
会将原始内容展平为 ['aaa1', 'aaa2', 'aaa3', 'bbb1', 'bbb2', …]
上的迭代器,因此您可以用一个 write_column
.
来编写它们
我有一个包含数据的列表列表,我想将它逐行写入一列,但是当我这样做时我的 excel 文件看起来像这样:
我希望它看起来像这样:
到目前为止,这是我的代码:
import xlsxwriter
all_list = [['aaa1','aaa2','aaa3'],
['bbb1','bbb2','bbb3'],
['ccc1','ccc2','ccc3']]
workbook = xlsxwriter.Workbook('qweqwe.xlsx')
worksheet = workbook.add_worksheet()
for row,data in enumerate(all_list):
worksheet.write_column(row,0,data)
workbook.close()
这里有几种打点的方法。
循环
将行初始化为0,并按每组数据的长度递增。
因此第一组数据将从第 0 行开始,然后下一组数据将在该行下方,依此类推。
import xlsxwriter
all_list = [['aaa1','aaa2','aaa3'],
['bbb1','bbb2','bbb3'],
['ccc1','ccc2','ccc3']]
workbook = xlsxwriter.Workbook('qweqwe.xlsx')
worksheet = workbook.add_worksheet()
row = 0
for data in all_list:
worksheet.write_column(row, 0, data)
row += len(data)
列表理解
您也可以通过 'flattening' 使用列表理解的列表列表来做到这一点。
import xlsxwriter
all_list = [['aaa1','aaa2','aaa3'],
['bbb1','bbb2','bbb3'],
['ccc1','ccc2','ccc3']]
workbook = xlsxwriter.Workbook('qweqwe.xlsx')
worksheet = workbook.add_worksheet()
data = [item for lst in all_list for item in lst]
worksheet.write_column(0, 0, data)
workbook.close()
------------------
您写的函数是worksheet.write_column(starting_row, starting_column, data)
。当您使用 for row, data in enumerate(all_list):
迭代 all_list
时,您将获得迭代:
row = 0
、data = ['aaa1','aaa2','aaa3']
row = 1
、data = ['bbb1','bbb2','bbb3']
row = 3
、data = ['ccc1','ccc2','ccc3']
因此您的起始行将依次为 0、1、2,并且您正在覆盖您已经编写的内容。
你可以用类似的东西来压平你的 all_list
:
from itertools import chain
worksheet.write_column(0, 0, chain.from_iterable(all_list))
chain.from_iterable(all_list)
会将原始内容展平为 ['aaa1', 'aaa2', 'aaa3', 'bbb1', 'bbb2', …]
上的迭代器,因此您可以用一个 write_column
.