如何在python中循环csv文件并将csv文件的每个部分输出到一个新文件中?

时间:2012-12-05 22:04:14

标签: python python-3.x

我在excel中有一个包含2000行数据的csv文件。我想将100行数据输出到不同的文本文件。但是我不知道如何做到这一点。我所能做的就是将文件输出到一个文件中。我已经在Python Pyscripter中读取了CSV文件数据,然后将文件写入一个文件,如下所示:

def read_csv(self):
    with open(self.data, newline='') as f:
        reader = csv.reader(f)
        for row in reader:
            self.content.append(row)

def write_txt(self):
    f = open(self.txtoutput, 'w')
    for row in self.content:
        f.write(', '.join(row) + '\n')
    f.close()

但是,我希望将每行100行的2000行数据输出到不同的文本文件中。任何人都可以指向正确的方向。注意:我使用的是Python3。 提前谢谢。

5 个答案:

答案 0 :(得分:2)

一次迭代100行的csv文件,并将每个块写入单独的文件:

with open(csv_filename, newline='') as file:
    chunks = zip(*[csv.reader(file)] * 100) # assume nrows % 100 == 0
    for i, rows in enumerate(chunks):
       with open("out%d.csv" % (i,), 'w', newline='') as output_file:
           csv.writer(output_file).writerows(rows)

请参阅What is the most “pythonic” way to iterate over a list in chunks?

答案 1 :(得分:0)

例如:你有一个计数器,每行增加一个,一旦达到一百,你关闭输出文件并打开一个新的。

答案 2 :(得分:0)

这样的东西
def write_txt(self):

    for index, row in enumerate(self.content):

        if index % 100 == 0:
            f = open(self.txtoutput + str(index) + ".txt", 'w')
            if index > 0:
                f.close()
        f.write(', '.join(row) + '\n')

    f.close()

答案 3 :(得分:0)

以下内容应该有效:

def write_txt(self):
    i = 0
    while i < len(self.content):
        with open(self.txtoutput + str(i/100), 'w') as f:
            for row in self.content[i:i+100]:
                f.write(', '.join(row) + '\n')
        i += 100

由于您没有指定如何命名不同的文本文件,我只是将一个递增的数字附加到self.txtoutput的末尾。

答案 4 :(得分:0)

def writeText(self):
    for index, offset in enumerate(range(0, len(self.content), 100)):
        with open(self.txtoutput + '{:03}'.format(index) + '.txt', 'w') as file:
            for eachRow in self.content[offset, offset+100]:
                file.write(', '.join(eachRow) + '\n')

有时候没有额外的变量是有趣的。这是@ F.J解决方案的一个简约版本。我将递增索引格式化为前导0,以便在文件列表中方便地排序。

具有可调整rowCount的列表理解解决方案可能看起来像(尚未测试过):

def writeText(self):
    rowCount = 100
    for index, eachGlump in enumerate(self.content[i:i+rowCount] for i in range(0, len(self.content), rowCount)):
        with open(self.txtoutput + '{:03}'.format(index) + '.txt', 'w') as file:
            for eachRow in eachGlump:
                file.write(', '.join(eachRow) + '\n')