我在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。 提前谢谢。
答案 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')