[英]How to write part of a list to a 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
,...]等。
請記住,CSV是以表格形式組織的(例如excel)。 首先有標題,然后是標題的每一列的數據在單獨的行上。 執行writerow
,必須為它提供正在寫入的當前行的特定列的實際值。 通過執行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中(這就是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
如果我正確地理解了您的問題,則可以執行以下操作:
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
的項目數不是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,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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.