简体   繁体   English

如何将 excel 中的列表列表逐行写入一列?

[英]How can i write a list of list in excel to only one column row by row?

I have a list of list with datas and i would like to write it to one column row by row but my excel file when i do it looks like this:我有一个包含数据的列表列表,我想将它逐行写入一列,但是当我这样做时,我的 excel 文件如下所示:

在此处输入图像描述

I want that to look like this:我希望它看起来像这样:
在此处输入图像描述

Here is my code so far:到目前为止,这是我的代码:

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()

Here are a couple of ways you could dot it.这里有几种方法可以给它加点。

Loop环形

Initialize row to 0 and increment it by the length of each set of data.将行初始化为 0,并按每组数据的长度递增。

So the first set of data will start at row 0, then the next set will go below that and so on.因此第一组数据将从第 0 行开始,然后下一组数据将在该行下方 go 以此类推。

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)

List comprehension列表理解

You could also do it by 'flattening' the list of lists using list comprehension.您也可以通过使用列表理解“展平”列表列表来做到这一点。

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()
------------------

The function you use for writing is worksheet.write_column(starting_row, starting_column, data) .你用来写的 function 是worksheet.write_column(starting_row, starting_column, data) When you iterate over your all_list with for row, data in enumerate(all_list): then you'll get iterations with:当您使用for row, data in enumerate(all_list):遍历all_list时,您将获得以下迭代:

  • row = 0 , data = ['aaa1','aaa2','aaa3'] row = 0data = ['aaa1','aaa2','aaa3']
  • row = 1 , data = ['bbb1','bbb2','bbb3'] row = 1data = ['bbb1','bbb2','bbb3']
  • row = 3 , data = ['ccc1','ccc2','ccc3'] row = 3data = ['ccc1','ccc2','ccc3']

So your starting row will be 0, 1, 2 in order and you're overwriting what you've already written.因此,您的起始行将按顺序为 0、1、2,并且您正在覆盖您已经编写的内容。

You can flatten your all_list with something like:您可以使用以下内容展平您的all_list

from itertools import chain

worksheet.write_column(0, 0, chain.from_iterable(all_list))

chain.from_iterable(all_list) will flatten the original into an iterator over ['aaa1', 'aaa2', 'aaa3', 'bbb1', 'bbb2', …] so you can write them all with a single write_column . chain.from_iterable(all_list)会将原始数据展平为['aaa1', 'aaa2', 'aaa3', 'bbb1', 'bbb2', …]上的迭代器,因此您可以使用单个write_column将它们全部写入。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM