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

我在这些列表中有数据。我需要在行的开头使用这些特定元素,然后在之后添加 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,...] 等等。


炎炎设计
浏览 200回答 3
3回答

慕沐林林

如果我正确地破译了你的问题,这样的事情会做到:import csvfrom itertools import zip_longestdef 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.2sub_header_1,27,11,289,377sub_header_2,598,3879,26,16sub_header_3,6.3,190,398,1412sub_header_0,6,3.5,73,88sub_header_1,857,26,193,27.5sub_header_2,13.0,Own 27.6,2:21,5.40sub_header_3,27.4请注意,由于 中的项目数data_list不是 中数字的精确倍数sub_sub_header_list,因此最后一行没有前面的那么长。

函数式编程

您还可以使用基本的 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,C16,72,3879,4,3793,19,7787,54,8726,4,1773,59,56并且可以通过以下方式生成 csv 文件:with open("outfile.csv", "w") as f:         f.write("\n".join(outlist))

HUWWW

请记住,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 csvpf = open("out.csv", "w")csv_writer = csv.DictWriter(pf, fieldnames=["A", "B", "C"])csv_writer.writeheader()LENGTH = 3  # number elements per columndata_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,C1,2,31,2,3
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python