i want split python dictionary , write different files based on no_of_lines_per_file , size of dictionary
input
no_of_lines_per_file
so if no_of_lines_per_file = 2 , size of dictionary 10 want dictionary splitted 5 files(each file have 2 rows)
script
import csv no_of_lines_per_file = 2 s = {"2222":["1","2","3"],"3456":["2","3","4"],"5634":["4","5"],"23543":["456","3"],"29587":["4","5"],"244":["23","34"],"455":["3","4"],"244221":["5"],"23232345":["2323","43"]} def again(c,h,no_of_lines_per_file1): f3 = open('num_'+str(h)+'.csv', 'at') if c == 1: ceh = 2 else: ceh = c print ceh v = 0 w in s: v = v + 1 if v < ceh: pass elif v > no_of_lines_per_file1: print "yes" no_of_lines_per_file1 = no_of_lines_per_file1 + 1 h = no_of_lines_per_file1 + 1 again(c,h,no_of_lines_per_file1) else: writer = csv.writer(f3,delimiter = ',', lineterminator='\n',quoting=csv.quote_all) writer.writerow(s[w]) c = c + 1 def split(): f3 = open('has_'+str(no_of_lines_per_file)+'.csv', 'at') writer = csv.writer(f3,delimiter = ',', lineterminator='\n',quoting=csv.quote_all) c = 0 w in s: if c >= no_of_lines_per_file: no_of_lines_per_file1 = no_of_lines_per_file + 1 h = no_of_lines_per_file again(c,h,no_of_lines_per_file1) break else: #print no_of_lines_per_file writer = csv.writer(f3,delimiter = ',', lineterminator='\n',quoting=csv.quote_all) writer.writerow(s[w]) c = c + 1 split()
but script not working , creates many files
in above script no_of_lines_per_file = 2 , size of dictionary s 9
so want 5 files first 4 file contain 2 rows each , fifth file contain 1 row
how can solve problem?
my method flat dict first, split flat dict sub list length want
import csv flatdict = [ in s.items()] splitflatdict = [flatdict[i:i+no_of_lines_per_file] in xrange(0,len(flatdict),no_of_lines_per_file)] i,rows in enumerate(splitflatdict): open(str(i) + '.csv','wb') f: writer = csv.writer(f) writer.writerows(rows)
Comments
Post a Comment