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

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

对于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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值