Python168的学习笔记5

关于对csv文件的操作。

python标准库中有csv的库,使用非常方便。

 1 import csv
 2 
 3 with open('pingan.csv','rb') as rf:
 4     reader = csv.reader(rf)#读操作
 5     with open('pingan2.csv','wb') as wf:
 6         writer = csv.writer(wf)
 7         headers = reader.next()
 8         writer.writerow(headers)#写操作
 9         for row in reader:
10             if row[0] < '2016-01-01':#满足条件就退出循环
11                 break            
12             if int(row[5]) >= 50000000:#对特定数据的判断
13                 writer.writerow(row)

 

关于对json文件的操作。

python标准库中也有json的库,操作也很方便。

 1 import json
 2 
 3 l = (1,2,'abc',{'name':'john','age':18})
 4 
 5 with open('demo.json','wb') as f:
 6     json.dump(l,f)
 7     
 8 with open('demo.json','rb') as f:
 9     r = json.load(f)  

 

关于对xml文件的操作,同样也是用标准库中的xml库来操作。

 1 #coding:utf8
 2 from xml.etree.ElementTree import parse
 3 
 4 f = open('demo.xml')
 5 et = parse(f)
 6 
 7 root = et.getroot()#根节点
 8 
 9 for child in root:#子节点
10     print child.get('name')
11     
12 for e in root.iterfind('country'):#跟上面结果一样,只是用了迭代
13     print e.get('name')
14     
15 print list(root.iter('rank'))#找孙子节点
16 
17 print root.findall('country/*')#某些语法特点
18 print root.findall('.//rank')

 

将csv文件写入xml的小实例

from xml.etree.ElementTree import ElementTree,Element#由element构成elementtree
import csv
from test_retractxml import pretty

def csvToxml(fname):
    with open(fname,'rb') as f:
        reader = csv.reader(f)
        headers = reader.next()#读取了第一行
        
        root = Element('Data')#构建了根节点
        for row in reader:#这里指针已经去到数据行了
            eRow = Element('Row')#创建子节点
            root.append(eRow)#将子节点插入根节点
            for tag,text in zip(headers,row):#迭代字典,就是将csv首行和数据行打包成字典,然后循环赋值
                e = Element(tag)
                e.text = text
                eRow.append(e)#将孙子节点插入到子节点
    pretty(root)
    return ElementTree(root)

et = csvToxml('pingan2.csv')
et.write('pingan.xml')

由于ElementTree自带的写入方法不能对格式进行操作,所以要自己写个缩进的方法。

1 def pretty(e,level=0):
2     if len(e)>0:
3         e.text='\n'+'\t'*(level+1)#先换行,然后给level个Tab
4         for child in e:
5             pretty(child,level+1)#递归给tab
6         child.tail = child.tail[:-1]#tail不懂(尾部的意思),这是对倒数第二行(子节点结尾)进行操作
7         #如果不操作,子节点结尾就会跟孙子节点一样缩进了
8     e.tail = '\n' +'\t' *level#这是对最后一行进行操作

 

posted @ 2016-11-11 22:49  Nanrou  阅读(272)  评论(0编辑  收藏  举报