【问题标题】:Splitting a Dictonary and saving it into multiple CSV's拆分字典并将其保存到多个 CSV
【发布时间】:2022-01-20 15:42:17
【问题描述】:

我正在尝试将我的 dict 列表拆分为多个 csv,但它在这里不起作用是我的代码:

fruits = [ ##items 
    {"item": "apple",
        "quantity": 5,
        "price": 0.95},
    {
        "item": "orange",
        "quantity": 7,
        "price": 0.99
    },
    {
        "item": "orange",
        "quantity": 7,
        "price": 0.99
    },
    {
        "item": "orange",
        "quantity": 7,
        "price": 0.99
    },
    {
        "item": "orange",
        "quantity": 7,
        "price": 0.99
    }]

这是我的清单,这里是拆分的代码

keys = fruits[0].keys()

try:
   os.mkdir("./CSV")
except OSError as e:
   print("Directory exists")

index = 0
for key in fruits:
    index += 1
    if index == 4:
        file_name = f"batch{x}.csv"
        with open("./CSV/" + f"batch{x}.csv", 'w', newline='') as output_file:
            dict_writer = csv.DictWriter(output_file, keys)
            dict_writer.writeheader()
            dict_writer.writerows(fruits)

但它不起作用。

【问题讨论】:

  • 您希望列表中的每个字典都是单独的 csv 文件还是存在某些条件?
  • 您的字典列表包含语法错误。但是您希望各个 csv 文件包含什么?
  • 是的,我想将每个字典拆分成一个 csv 文件

标签: python list csv split


【解决方案1】:

所以,我从您的问题中了解到,您希望将每个字典内容写入单独的 CSV 文件中。这是执行此操作的代码:

import sys
import os
import csv
fruits = [ ##items 
    {"item": "apple",
        "quantity": 5,
        "price": 0.95},
    {
        "item": "orange",
        "quantity": 7,
        "price": 0.99
    },
    {
        "item": "orange",
        "quantity": 7,
        "price": 0.99
    },
    {
        "item": "orange",
        "quantity": 7,
        "price": 0.99
    },
    {
        "item": "orange",
        "quantity": 7,
        "price": 0.99
    }]

keys = fruits[0].keys()

try:
   os.mkdir("./CSV")
except OSError as e:
   print("Directory exists")

index = 0
for dict_ in fruits:
   index +=1
   for k,v in dict_.items():
      #print(dict_)
      file_name = f"batch{index}.csv"
      with open("./CSV/" + f"batch{index}.csv", 'a', newline='') as output_file:
            dict_writer = csv.writer(output_file)
            dict_writer.writerow([k,v])

输出:5 个不同的 CSV 文件 batch1.csv、batch2.csv、...、batch5.csv,每个都包含水果列表中相应位置的字典内容。

【讨论】:

  • 你知道如何在第 4 个 dict 之后拆分它,以便我有前 4 个 dict 的 csv 和另一个只有第 5 个 dict 的 csv?
  • 我不太明白你在问什么,第 4 和第 5 字典已经分配了单独的 CSV 文件,所有其他字典也是如此。
  • 假设我有一个包含 50 个字典的列表。我的想法是在每五个 dict 之后创建一个 csv,每个 dict 有 5 个。
  • 为此,添加一个带有索引变量的计数变量,对于外部for循环的每次迭代,做计数+=1,如果计数==5:计数=0,索引+=1(删除当前index+=1),这样每五次迭代你就会改变索引,这里改变索引就像改变到下一个csv文件。
  • 是的,谢谢它的工作,唯一的问题是列名不像它应该的那样。所以这不是“商品、质量和价格”,而是“商品和苹果”
【解决方案2】:

重构您的代码以首先打开文件,写入标题,然后在循环中写入行。你所拥有的是在每一行之前写标题。

【讨论】:

  • 是的,但我想根据我的列表在第 4 个键之后将其拆分为多个 csvs 文件,我不知道然后打开哪个文件。
  • 然后构建多个字典,每个文件一个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
  • 2021-05-08
  • 2016-04-11
  • 1970-01-01
相关资源
最近更新 更多