python将csv文件拆分,在python中将一个csv拆分为多个文件

I have a csv file of about 5000 rows in python i want to split it into five files.

I wrote a code for it but it is not working

import codecs

import csv

NO_OF_LINES_PER_FILE = 1000

def again(count_file_header,count):

f3 = open('write_'+count_file_header+'.csv', 'at')

with open('import_1458922827.csv', 'rb') as csvfile:

candidate_info_reader = csv.reader(csvfile, delimiter=',', quoting=csv.QUOTE_ALL)

co = 0

for row in candidate_info_reader:

co = co + 1

count = count + 1

if count <= count:

pass

elif count >= NO_OF_LINES_PER_FILE:

count_file_header = count + NO_OF_LINES_PER_FILE

again(count_file_header,count)

else:

writer = csv.writer(f3,delimiter = ',', lineterminator='\n',quoting=csv.QUOTE_ALL)

writer.writerow(row)

def read_write():

f3 = open('write_'+NO_OF_LINES_PER_FILE+'.csv', 'at')

with open('import_1458922827.csv', 'rb') as csvfile:

candidate_info_reader = csv.reader(csvfile, delimiter=',', quoting=csv.QUOTE_ALL)

count = 0

for row in candidate_info_reader:

count = count + 1

if count >= NO_OF_LINES_PER_FILE:

count_file_header = count + NO_OF_LINES_PER_FILE

again(count_file_header,count)

else:

writer = csv.writer(f3,delimiter = ',', lineterminator='\n',quoting=csv.QUOTE_ALL)

writer.writerow(row)

read_write()

The above code creates many fileswith empty content.

How to split one files into five csv files?

解决方案

I suggest you not inventing a wheel. There is existing solution. Source here

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'), delimiter=delimiter)

current_limit = row_limit

if keep_headers:

headers = reader.next()

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'), delimiter=delimiter)

if keep_headers:

current_out_writer.writerow(headers)

current_out_writer.writerow(row)

Use it like:

split(open('/your/pat/input.csv', 'r'));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值