生成演示数据:
import random
random.seed(20180119) # remove to get random data between runs
id = 'identifier'
def genData():
data = []
for n in range(10+random.randint(1,10)):
data.append(id)
data.extend(random.choices(range(1,20),k=random.randint(3,12)))
print(data)
return data
输出:
['identifier', 18, 6, 19, 10, 12, 18, 17, 12,
'identifier', 10, 17, 17, 10, 15, 12, 16, 18, 19, 18, 14, 9,
'identifier', 6, 10, 1, 14, 4,
'identifier', 3, 7, 7, 4, 8, 2, 16, 8, 1, 8, 16, 6,
'identifier', 6, 17, 8, 8, 13, 15, 7, 9, 4, 10, 15,
'identifier', 17, 8, 3, 8, 2, 19, 16, 2, 5, 6,
'identifier', 18, 6, 18, 19, 7, 8, 14, 7, 7, 19,
'identifier', 13, 7, 4, 13,
'identifier', 15, 8, 17, 8, 1, 12, 16, 7, 5, 19, 14, 9,
'identifier', 18, 16, 10, 7, 16, 18, 19, 6, 15, 8, 13, 15,
'identifier', 15, 2, 18, 13, 7,
'identifier', 17, 19, 15, 4, 18, 7, 13, 17, 8, 9,
'identifier', 9, 17, 18, 8, 17, 17, 17,
'identifier', 3, 16, 15, 13, 9,
'identifier', 15, 12, 2, 16, 2, 5, 16, 18]
重新格式化:
def partitionData(idToUse,dataToUse):
lastId = None
for (i,n) in enumerate(data): # identify subslices of data
if n == idToUse and not lastId: # find first id, data before is discarded
lastId = i
continue
if n == idToUse: # found id
yield data[lastId:i] # yield sublist including idToUse
lastId = i
if (data[-1] != id): # yield rest of data
yield data[lastId:]
写入数据:
data = genData()
partitioned = partitionData(id, data)
import itertools
import csv
with open('result.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile, delimiter=";")
# like zip, but fills up shorter ones with None till longest index
writer.writerows(itertools.zip_longest(*partitioned, fillvalue=None))
result.csv:
identifier;identifier;identifier;identifier;identifier;identifier;identifier;identifier;identifier;identifier;identifier;identifier;identifier;identifier
10;6;3;6;17;18;13;15;18;15;17;9;3;15
17;10;7;17;8;6;7;8;16;2;19;17;16;12
17;1;7;8;3;18;4;17;10;18;15;18;15;2
10;14;4;8;8;19;13;8;7;13;4;8;13;16
15;4;8;13;2;7;;1;16;7;18;17;9;2
12;;2;15;19;8;;12;18;;7;17;;5
16;;16;7;16;14;;16;19;;13;17;;16
18;;8;9;2;7;;7;6;;17;;;18
19;;1;4;5;7;;5;15;;8;;;
18;;8;10;6;19;;19;8;;9;;;
14;;16;15;;;;14;13;;;;;
9;;6;;;;;9;15;;;;;
链接:
- itertools.zip_longest
- csv-writer