明凯博客

关注网站技术,一个特立独行的程序员

【python案例】将大CSV文件分割为小CSV文件

我们上次写的爬虫生成csv有十多兆,大概有3万条数据,但是我只需要用100条数据,需要用三百次不重复。
在网上在了一些csv分割软件,都分割出来的有问题,详情里面如果有逗号,则会看成一个字段。
后面用php写,linux下还好,能够分割出来,windows下一直卡死,这里推荐一个lavarel的Laravel Excel库,操作起来简直酷的不要不要的。
但是php语言始终太慢,容易出错。

最后想到了用python来分割,代码如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# -*- coding: utf-8 -*-
# 
import os
import sys
import csv
 
# 初始化编码
reload(sys)
sys.setdefaultencoding('utf-8')
 
# 读取本地csv文件
csv_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),'csv','source.csv')
csv_reader = csv.reader(open(csv_path,'rb'))
csv_reader.next()
i=j=1
for row in csv_reader:
	if i%102==0:
		print u"CSV文件source%s已生成成功" % j
		j+=1
	# 写入csv
	csv_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),'csv','source'+str(j)+'.csv')
	csv_file = file(csv_path, 'ab+')
	csv_write = csv.writer(csv_file)
	# 文件不存在则写入头部	
	if os.path.getsize(csv_path)==0:
		csv_write.writerow(['v_products_image','v_products_name_1','v_products_description_1','v_products_price','v_categories_name_1','v_categories_name_2'])
	# 写入数据
	csv_write.writerow([row[0],row[1],row[2],row[3],row[4],row[5]])
	csv_file.close()
	i+=1
# 关闭连接

这里用i和j来判断,出去第一行字段名,到102行时再重新生成一个csv文件。

1
2
3
if i%102==0: 
     print u"CSV文件source%s已生成成功" % j
     j+=1

生成的速度太快了。
1

我们再看看文件目录:

2

, , ,

相关文章

9 条评论 “【python案例】将大CSV文件分割为小CSV文件

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注