import os def split(filehandler, delimiter=',', row_limit=1000, output_name_template='output_%s.csv', output_path='.', keep_headers=True): import csv reader = csv.reader(filehandler, delimiter=delimiter) current_piece = 1 current_out_path = os.path.join( output_path, output_name_template % current_piece ) current_out_writer = csv.writer(open(current_out_path, 'w', newline=''), delimiter=delimiter) current_limit = row_limit if keep_headers: # headers = reader.next() headers = next(reader) current_out_writer.writerow(headers) for i, row in enumerate(reader): if i + 1 > current_limit: current_piece += 1 current_limit = row_limit * current_piece current_out_path = os.path.join( output_path, output_name_template % current_piece ) current_out_writer = csv.writer(open(current_out_path, 'w', newline=''), delimiter=delimiter) if keep_headers: current_out_writer.writerow(headers) current_out_writer.writerow(row) if __name__ == '__main__': file_name = 'snakes_count_10000.csv' basename = os.path.splitext(file_name)[0] # Create folder if not exists try: os.mkdir(basename) except Exception as e: pass with open(file_name) as filehandler: split(filehandler, delimiter=',', row_limit=100, output_name_template='{}_%s.csv'.format(basename), output_path=basename, keep_headers=True)