3 回答

TA貢獻(xiàn)2016條經(jīng)驗(yàn) 獲得超9個(gè)贊
如果我正確地破譯了你的問(wèn)題,這樣的事情會(huì)做到:
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))
這是它根據(jù)示例數(shù)據(jù)創(chuàng)建的 csv 文件的內(nèi)容:
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
請(qǐng)注意,由于 中的項(xiàng)目數(shù)data_list不是 中數(shù)字的精確倍數(shù)sub_sub_header_list,因此最后一行沒(méi)有前面的那么長(zhǎng)。

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊
您還可以使用基本的 Python 函數(shù)來(lái)編寫(xiě) csv 文件。
假設(shè)您的數(shù)據(jù)如下:
# 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
并且可以通過(guò)以下方式生成 csv 文件:
with open("outfile.csv", "w") as f:
f.write("\n".join(outlist))

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個(gè)贊
請(qǐng)記住,CSV 以表格方式(如 excel)結(jié)構(gòu)。首先是標(biāo)題,然后是單獨(dú)行上標(biāo)題的每一列的數(shù)據(jù)。當(dāng)您執(zhí)行 a 時(shí),writerow您必須為特定列提供正在寫(xiě)入的當(dāng)前行的實(shí)際值。您基本上已經(jīng)在每個(gè)列的 CSV 中編寫(xiě)了幾個(gè)列表,w.writerow([sub_sub_header_list[0], data_list[0:29]])這基本上是這樣的,這就是w.writerow([1, 2...], [3, 4,...])為什么您在 CSV 數(shù)據(jù)中輸入了如下內(nèi)容:
u'[1,2,..]', u'[3,4,...]'
它基本上將每個(gè)列表視為一個(gè)單獨(dú)的單元格,并將其轉(zhuǎn)換為字符串,以便將其存儲(chǔ)在 CSV 中(這就是 CSV 的u''來(lái)源)。
你基本上必須在整個(gè)向量中保留一個(gè)引用索引,因?yàn)樗且粋€(gè)一維數(shù)據(jù)結(jié)構(gòu),一個(gè)接一個(gè)地附加了系列。
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()
輸出將類(lèi)似于:
A,B,C
1,2,3
1,2,3
添加回答
舉報(bào)