【发布时间】:2018-09-24 10:16:44
【问题描述】:
我正在尝试创建一个将大型 CSV 文件拆分为较小文件的程序。我的函数运行良好,除了它永远不会关闭最后一个文件,这意味着它永远不会完成对该文件的写入。这是我得到的:
import csv
length of original file = 1000 rows
length_of_new_file = 100 # rows
def file_splitter(file_name, desired_length):
with open("{}".format(file_name), 'r') as original_file:
header = original_file.readline()
file_reader = csv.reader(original_file,dialect='excel')
file_count = 0
new_name = 'split_file_test'
loop = 0
while file_reader:
with open("{}{}.csv".format(new_name, file_count), 'w', newline='') as new_file:
new_file.write(header)
csv_writer = csv.writer(new_file, delimiter=',')
for line in file_reader:
if loop == (desired_length-1):
csv_writer.writerow(line)
new_file.close()
file_count += 1
loop = 0
break
else:
csv_writer.writerow(line)
loop += 1
test_file = 'zlotsacontacts.csv'
file_splitter(test_file, length_of_new_file)
我尝试添加 new_file.close(),但无论我把它放在哪里,最后一个文件似乎永远不会关闭。我还在最外层的 while 循环中尝试了不同的逻辑,例如:
while file_reader != '':
和
while file_reader not None:
但据我所知,CSV 模块无法识别 None 值。我不确定我能做些什么来关闭这个循环!
【问题讨论】:
-
编辑 - 我希望能够做到这一点,而无需遍历文件两次。如果不能帮助,那就不能帮助,但这是一个开始的目标。抱歉没有提到!
标签: python python-3.x csv writer reader