【问题标题】:splitting dictionary and writing it to different csv file in python拆分字典并将其写入python中的不同csv文件
【发布时间】:2016-04-06 14:10:23
【问题描述】:

我想根据 NO_OF_LINES_PER_FILE 和字典的大小拆分 python 字典并将其写入不同的文件

输入

NO_OF_LINES_PER_FILE

所以如果 NO_OF_LINES_PER_FILE = 2 且字典大小为 10,我希望将字典拆分为 5 个文件(每个文件将有 2 行)

脚本

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
    for 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
    for 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()

但是这个脚本不工作并且创建了很多文件

在上面的脚本中 NO_OF_LINES_PER_FILE = 2 并且字典 s 的大小是 9

所以我想要 5 个文件,前四个文件将包含 2 行,第五个文件将包含 1 行

我该如何解决这个问题?

【问题讨论】:

  • 如果您可以根据您的输入显示文件的预期内容,将会有所帮助。
  • 预期内容:我希望将键 (["1","2","3"]) 的值写入 csv 文件...
  • 所以你想要一个包含(["1","2","3"]) 的文件?这就是您刚才所说的,但这似乎与您在问题中描述的非常不同。

标签: python csv dictionary split


【解决方案1】:

我的方法是先将字典扁平化,然后将扁平化字典拆分为您想要的长度的子列表

    import csv
    flatDict = [ i  for i in s.items()]
    splitFlatDict = [flatDict[i:i+NO_OF_LINES_PER_FILE] for i in xrange(0,len(flatDict),NO_OF_LINES_PER_FILE)]
    for i,rows in enumerate(splitFlatDict):
      with open(str(i) + '.csv','wb') as f:
        writer = csv.writer(f)
        writer.writerows(rows)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多