1

我在 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()

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

4

5 回答 5

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)

请参阅以块为单位迭代列表的最“pythonic”方式是什么?

于 2012-12-05T22:36:59.183 回答
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')

有时没有额外的变量很有趣。这是@FJ 解决方案的无时间版本。我用前导 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')
于 2012-12-05T22:28:17.890 回答
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()
于 2012-12-05T22:11:32.140 回答
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.

于 2012-12-05T22:11:50.080 回答
0

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

于 2012-12-05T22:07:56.053 回答