您的位置:首页 > 编程语言 > Python开发

读书笔记--python数据可视化--005_导出数据到JSON、CSV和EXcel

2015-12-27 11:40 886 查看
在做数据可视化时,我们通常只是使用其他人的数据,所以导入和读取数据是只要的工作。然而,不管是我们还是他人的需要,不管是现在还是将来的需要,我们缺失需要把产生或者处理过的数据导出或写到某个地方。

对于Excel写的部分,需要安装xlwt模块。

$ pip install xlwt


示例代码:

#-*- coding: UTF-8 -*-
'''
#################################################
# Author : 余欢
# Date : Dec 27, 2015    10:30:29 AM
#company : 南京师范大学--大数据实验室
# description :
#################################################
'''

import argparse
import csv
import json
import os
import struct
import sys
import xlwt

try:
import cStringIO as StringIO
except:
import StringIO

def import_data(import_file):
'''
从数据文件中导入数据,这里使用定宽数据,格式为:
161322597  0386544351896  0042
'''
mask="9s14s5s"
data = []
with open(import_file, "r") as f:
for line in f:
#将一行解析成一个元组
fields = struct.unpack_from(mask, line)
#清楚每个字段两侧的空白字符,并打包到一个列表中
data.append(list([f.strip() for f in fields]))
return data

def write_data(data, export_format):
if export_format == "csv":
return write_csv(data)
elif export_format == "json":
return write_json(data)
elif export_format == "xlsx":
return write_xlsx(data)
else:
raise Exception("Illegal format defined")

def write_csv(data):
'''
将数据导入导CSV文件中.将csv文件当作一个字符串返回
'''
f = StringIO.StringIO()
writer = csv.writer(f)

for row in data:
writer.writerow(row)

return f.getvalue()

def write_json(data):
'''
将数据导入导json文件中
'''
return json.dump(data)

def write_xlsx(data):
'''
将数据导入导Excel文件中
'''
book = xlwt.Workbook()
sheet1 = book.add_sheet("Sheet 1")
row = 0
for line in data:
col = 0
for datum in line:
print datum
sheet1.write(row, col, datum)
col += 1
row += 1
if row > 65535:
print >> sys.stderr, "一张工作薄无法存储大于65535行数据"
break

#保存文件并返回
f = StringIO.StringIO()
book.save(f)

return f.getvalue()

if __name__ == "__main__":
'''
解析命令行参数中传入的文件路径,导入数据并导出成要求的格式
'''
#1  解析命令行参数
parser = argparse.ArgumentParser()
parser.add_argument("import_file", help="Path to a fixed-width data file.")
parser.add_argument("export_format", help="Export format:json, cav, xlsx")
args = parser.parse_args()

if args.import_file is None:
print >> sys.stderr, "您没有输入源数据文件!"
sys.exit(1)

if args.export_format is None:
print >> sys.stderr, "您必须指定要导出的数据格式!"
sys.exit(1)

if not os.path.isfile(args.import_file):
print >> sys.stderr, "您输入的源数据文件的路径有误:%s" % args.import_file
sys.exit(1)

#读取数据
data = import_data(args.import_file)

#打印导出的数据
print write_data(data, args.export_format)


命令行的命令:

/root/Desktop/data-visualization/data_visualization_Code/3367OS_02_Code/ch02-fixed-width-1M-2.data xlsx


注意:

[1]这里面的用fields = struct.unpack_from(mask, line)这种方式导入数据时发现不能导入数据量大的数据,我于是只是用100行的数据进行实验。所以,建议使用NumPy的数据导入方式。要不然会报错:

struct.error: unpack_from requires a buffer of at least 28 bytes
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: