【问题标题】:How to write chunks of data in multiple csv files using python如何使用python在多个csv文件中写入数据块
【发布时间】:2021-06-13 12:46:44
【问题描述】:

我在一个文件中有一些巨大的数据,比如 100000 行,我想将这些数据写入 CSV 文件,但我想要一个只能包含 20000 行的 CSV 文件,而其他 20000 行写入另一个 CSV 文件,

在这种方法中,我需要 5 个不同的 CSV,每个包含 20000 行。 并且文件的命名应该是。

csv_file1.csv
csv_file2.csv
csv_file3.csv
csv_file4.csv
csv_file5.csv

如果数据是 100001,那么最后一行应该写入另一个 CSV 文件。一个CSV文件的数据限制只有20000。

我试过这样:

while number_of_line != 20000:  
    with open(csv_file, 'w') as csvfile:
        fieldnames = defile_field
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
        writer.writeheader()
        for row in data:
            writer.writerow({"data":row})

【问题讨论】:

  • 您可以将总数除以 2000 并始终向上取整,这样您就知道要运行多少个循环。
  • 谢谢,我试试
  • 仍然,我遇到了一些错误
  • 这个答案有帮助吗? Automatically limit rows

标签: python python-3.x list csv


【解决方案1】:

您可以使用如下辅助函数:

import csv
from itertools import islice


def chunks(iterable, n):
    """Yield successive n-sized chunks from iterable."""
    it = iter(iterable)
    while chunk := tuple(islice(it, n)):
        yield chunk


data = [{"field_a": 1, "field_b": 2, "field_c": 3} for _ in range(15)]
fieldnames = ["field_a", "field_b", "field_c"]

for i, rows in enumerate(chunks(data, 10), start=1):
    with open(f"csv_file{i}.csv", "w") as csvfile:
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
        writer.writeheader()
        writer.writerows(rows)

【讨论】:

  • 感谢您的代码,但此代码无法正常工作,请您帮帮我
  • 如果没有您尝试提供的数据的至少一个示例,这将很难:P
  • 好的,我添加了一些测试数据并对其进行了测试,它适用于 Python >= 3.8,您必须重写海象才能使其在旧 Python 上工作。
【解决方案2】:

一种可能的方法是在 csv 文件上使用循环从原始文件中获取数据:

with open('orig.csv') as fd:
    rd = csv.DictReader(fd)
    num = 1
    cont = True
    while cont:
        with open('cvs_file{}.csv'.format(i), 'w', newline='') as fdout:
            wr = cvs.DictWriter(fdout, fieldnames=rd.fieldnames)
            wr.writeheader()
            for i in range(20000):       # max rows per file
                try:
                    row = next(rd)
                    wr.writerow(row)
                except StopIteration:
                    cont = False
                    break
        num += 1

【讨论】:

  • 非常感谢,但是这段代码给出了一些 i 未定义的错误。
  • @Shradha:我的错。我写了i,而它应该是num。固定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-29
  • 2022-11-03
相关资源
最近更新 更多