Python高效编程实战---5、csv json xml excel高效解析与构建技巧

一、如何读写csv数据

from urllib import urlretrieve
# urlretrieve('http://finance.yahoo.com/d/quotes.csv?s=000001.sz','pingan1.csv')  # 从网址下载文件存到文件中

import csv
with open('pingan1.csv','rb') as rf:  
    reader=csv.reader(rf)   # 返回一个reader对象,可迭代
    with open('pingan3.csv','wb') as wf:
        writer=csv.writer(wf)  # 返回一个writer对象
        headers =reader.next()
        writer.writerow(headers)  # 将列表写入csv文件的一行 headers为rowdict       
        for rd in reader:
            if rd[0]<'2016-01-01':
                continue
            if int(rd[5])>50:
                writer.writerow(rd)

二、如何读写json数据

import json

a = ['b', 'a', 123, {'y': None, 'x': 1, 'z': 'hello'}]
# separators列表必须前面是',',后面是':',前后可以加空格
# sort_keys设为True可以对列表中字典进行排序
aj = json.dumps(a, sort_keys=False, separators=[',', ':'])
print aj
# ["b", "a", 123, {"x": 1, "y": null, "z": "hello"}]   # 此处结果将None转换为null
print json.loads(aj)
# [u'b', u'a', 123, {u'y': None, u'x': 1, u'z': u'hello'}]  # load后,转换为unicode编码

print '------------- dump load ------------'
# dump与load是将对象转换成json串写入文件或直接从json文件中读取对象
with open('demo.json','wb') as f:
    json.dump(a,f)
with open('demo.json','rb') as f:
    b = json.load(f)
    print b

三、如何解析简单的xml文档

使用标准库中的xml.etree.ElementTree,其中的parse函数可以解析xml文档

from xml.etree.cElementTree import parse
f = open('demo.xml')
et = parse(f)  # 得到一个
root=et.getroot()  # 得到树的根结点 

四、如何构建xml文档

使用标准库中的xml.etree.ElementTree,构建ElementTree,使用write方法写入文件

import csv
from xml.etree.ElementTree import Element, ElementTree

def pretty(e, level=0):  # 格式美化
    if len(e) > 0:  # 子元素的个数
        e.text = '\n' + '\t' * (level + 1)  # 如果有子元素的值后面添加回车,在下一行添加制表符
        for child in e:
            pretty(child, level + 1)  # 递归调用
        child.tail = child.tail[:-1]  # 下一层循环结束,进入到上一层级格式时,需要减少一人制表符
    e.tail = '\n' + '\t' * level  # 如果元没有子元素,则在子元素结束符后面添加回车,下一行 添加制表符

# 将csv转化成xml文件
def csvToXml(fname):  #
    with open(fname, 'rb') as f:
        reader = csv.reader(f)  # 获取csv文件的reader可迭代对象
        headers = reader.next()  # 获取头部行
        root = Element('Data')  # 建立根元素
        for row in reader:  # 遍历csv的每一行
            eRow = Element('Row')  # 建立行元素,添加到根元素之下
            root.append(eRow)
            for tag, text in zip(headers, row):  # zip将可迭代元素并列迭代
                el = Element(tag)  # 建立行元素下子元素
                el.text = text
                eRow.append(el)
    pretty(root)  # 格式美化
    return ElementTree(root)

et = csvToXml('pingan3.csv')
et.write('pingan1.xml')

五、如何读写excel文件

import xlrd, xlwt

rbook = xlrd.open_workbook('excel.xlsx')  # 打开一个工作簿
rsheet = rbook.sheet_by_name('Sheet1')    # 打开一个工作表

nc = rsheet.ncols
nr = rsheet.nrows

rsheet.put_cell(0, nc, xlrd.XL_CELL_TEXT, u'总计', None)  # 对总计列添加字段

for row in xrange(1, nr):
    t = sum(rsheet.row_values(row, 1))  # row行,从第1个到最后一个值的和
    rsheet.put_cell(row, nc, xlrd.XL_CELL_NUMBER, t, None)  # 对总计列赋值

wbook = xlwt.Workbook()  # 新建一个workbook对象
wsheet = wbook.add_sheet(rsheet.name)  # 添加一个sheet表
style = xlwt.easyxf('align:vertical center,horizontal center')  # 定义样式
for row in xrange(nr):
    for col in xrange(nc+1):
        c = rsheet.cell_value(row, col)
        print c
        wsheet.write(row, col, c, style)
wbook.save('excel_bak.xls')   # xlwt 对xlsx格式支持不好,可能会出错
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值