Если бы я правильно расшифровал ваш вопрос, что-то вроде этого сделало бы:
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
, последняя строка не так длинна, как предыдущие.