为了账号安全,请及时绑定邮箱和手机立即绑定

如何将列表的一部分写入 csv?

如何将列表的一部分写入 csv?

炎炎设计 2021-09-23 09:57:50
我在这些列表中有数据。我需要在行的开头使用这些特定元素,然后在之后添加 30 个数据点。我了解如何拼接列表,但我想从列表中返回那些单独的项目w.writerow([sub_sub_header_list[0], data_list[0:29]])w.writerow([sub_sub_header_list[1], data_list[30:59]])w.writerow([sub_sub_header_list[2], data_list[60:89]])w.writerow([sub_sub_header_list[3], data_list[90:119]])我得到这样的东西:Team Stats, [u'310', u'5291', u'1018', u'5.2', u'27', u'11', u'289', u'377', u'598', u'3879', u'26', u'16', u'6.3', u'190', u'398', u'1412', u'6', u'3.5', u'73', u'88', u'857', u'26', u'193', u'27.5', u'13.0', u'Own 27.6', u'2:21', u'5.40', u'27.4']当我想要:Team Stats, [310, 5291, 1018,...] 等等。
查看完整描述

3 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

如果我正确地破译了你的问题,这样的事情会做到:


import csv

from itertools import zip_longest



def grouper(n, iterable, sentinel=object()):

    """ Collect data into fixed-length chunks or blocks. """

    args = [iter(iterable)] * n

    for t in zip_longest(*args, fillvalue=sentinel):

        yield list(elem for elem in t if elem is not sentinel)



# Example usage.

data_list = [u'310', u'5291', u'1018', u'5.2', u'27', u'11', u'289', u'377', u'598',

             u'3879', u'26', u'16', u'6.3', u'190', u'398', u'1412', u'6', u'3.5', u'73',

             u'88', u'857', u'26', u'193', u'27.5', u'13.0', u'Own 27.6', u'2:21',

             u'5.40', u'27.4']

sub_sub_header_list = [u'sub_header_0', u'sub_header_1', u'sub_header_2',

                       u'sub_header_3']


output_filename = 'grouped_data.csv'

group_size = len(sub_sub_header_list)

with open(output_filename, 'w', newline='') as csv_file:

    csv_writer = csv.writer(csv_file)

    for i, group in enumerate(grouper(group_size, data_list)):

        row = [sub_sub_header_list[i%group_size]] + group

        csv_writer.writerow(row)


print('File {!r} written.'.format(output_filename))

这是它根据示例数据创建的 csv 文件的内容:


sub_header_0,310,5291,1018,5.2

sub_header_1,27,11,289,377

sub_header_2,598,3879,26,16

sub_header_3,6.3,190,398,1412

sub_header_0,6,3.5,73,88

sub_header_1,857,26,193,27.5

sub_header_2,13.0,Own 27.6,2:21,5.40

sub_header_3,27.4

请注意,由于 中的项目数data_list不是 中数字的精确倍数sub_sub_header_list,因此最后一行没有前面的那么长。


查看完整回答
反对 回复 2021-09-23
?
函数式编程

TA贡献1807条经验 获得超9个赞

您还可以使用基本的 Python 函数来编写 csv 文件。


假设您的数据如下:


# elements converted to strings:

data_list = list(map(str, numpy.random.randint(1,100,20)))

sub_sub_header_list = ['A','B','C']

以下代码将生成所需的列表:


rowsize = len(sub_sub_header_list)

outlist=[]

# create header:

outlist.append(",".join(sub_sub_header_list))         

# create rows:

for i in range(0,len(data_list)-rowsize,rowsize):

    outlist.append(",".join(data_list[i:i+rowsize]))  

# show format:

print("\n".join(outlist))            

输出采用所需的格式:


A,B,C

16,72,38

79,4,37

93,19,77

87,54,87

26,4,17

73,59,56

并且可以通过以下方式生成 csv 文件:


with open("outfile.csv", "w") as f:     

    f.write("\n".join(outlist))


查看完整回答
反对 回复 2021-09-23
?
HUWWW

TA贡献1874条经验 获得超12个赞

请记住,CSV 以表格方式(如 excel)结构。首先是标题,然后是单独行上标题的每一列的数据。当您执行 a 时,writerow您必须为特定列提供正在写入的当前行的实际值。您基本上已经在每个列的 CSV 中编写了几个列表,w.writerow([sub_sub_header_list[0], data_list[0:29]])这基本上是这样的,这就是w.writerow([1, 2...], [3, 4,...])为什么您在 CSV 数据中输入了如下内容:


u'[1,2,..]', u'[3,4,...]'

它基本上将每个列表视为一个单独的单元格,并将其转换为字符串,以便将其存储在 CSV 中(这就是 CSV 的u''来源)。


你基本上必须在整个向量中保留一个引用索引,因为它是一个一维数据结构,一个接一个地附加了系列。


import csv


pf = open("out.csv", "w")


csv_writer = csv.DictWriter(pf, fieldnames=["A", "B", "C"])

csv_writer.writeheader()


LENGTH = 3  # number elements per column

data_list = [1, 1, 2, 2, 3, 3]


for i in range(LENGTH):

    csv_writer.writerow({

        'A': data_list[i],

        'B': data_list[i+LENGTH],

        'C': data_list[i+LENGTH*2],

    })


pf.close()

输出将类似于:


A,B,C

1,2,3

1,2,3


查看完整回答
反对 回复 2021-09-23
  • 3 回答
  • 0 关注
  • 199 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信