Python168的学习笔记5
关于对csv文件的操作。
python标准库中有csv的库,使用非常方便。
import csv
with open('pingan.csv','rb') as rf:
reader = csv.reader(rf)#读操作
with open('pingan2.csv','wb') as wf:
writer = csv.writer(wf)
headers = reader.next()
writer.writerow(headers)#写操作
for row in reader:
if row[0] < '2016-01-01':#满足条件就退出循环
break
if int(row[5]) >= 50000000:#对特定数据的判断
writer.writerow(row)
关于对json文件的操作。
python标准库中也有json的库,操作也很方便。
import json
l = (1,2,'abc',{'name':'john','age':18})
with open('demo.json','wb') as f:
json.dump(l,f)
with open('demo.json','rb') as f:
r = json.load(f)
关于对xml文件的操作,同样也是用标准库中的xml库来操作。
#coding:utf8
from xml.etree.ElementTree import parse f = open('demo.xml')
et = parse(f) root = et.getroot()#根节点 for child in root:#子节点
print child.get('name') for e in root.iterfind('country'):#跟上面结果一样,只是用了迭代
print e.get('name') print list(root.iter('rank'))#找孙子节点 print root.findall('country/*')#某些语法特点
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自带的写入方法不能对格式进行操作,所以要自己写个缩进的方法。
def pretty(e,level=0):
if len(e)>0:
e.text='\n'+'\t'*(level+1)#先换行,然后给level个Tab
for child in e:
pretty(child,level+1)#递归给tab
child.tail = child.tail[:-1]#tail不懂(尾部的意思),这是对倒数第二行(子节点结尾)进行操作
#如果不操作,子节点结尾就会跟孙子节点一样缩进了
e.tail = '\n' +'\t' *level#这是对最后一行进行操作
Python168的学习笔记5的更多相关文章
- Python168的学习笔记8
#coding:utf8 #斐波那契数列,第三项起,每一项都等于前两项之和 def memo(func): cache = {}#闭包 def wrap(*args): if args not in ...
- Python168的学习笔记7
关于多线程操作. 对于IO操作,如访问网站,写入磁盘这种需要时间等待响应的操作,多个cpu也几乎不能提高效率. 对于CPU密集型操作,如这个格式转换,可以通过多个cpu同时去进行. 但是对于pytho ...
- Python168的学习笔记6
如何派生内置不可变类型并修改实例化行为. 个人理解,如何派生出自己想要的类. class IntTuple(tuple): def __new__(cls,iterable): g = (x for ...
- Python168的学习笔记4
关于普通文本文件的读写 python2.7中,未注明的字符都是以acsii来编码的,而要让字符能够通用,必须声明为unicode. s=u'你好',s.encode('utf8')就是指用utf8来进 ...
- Python168的学习笔记3
list.extend(),可以拓展list,a=(0,1),b=(2,3) a.extend(b),a就变成(0,1,2,3) 分割字符串(除去字符串中的,\/;之类的),如果用str.split( ...
- Python168的学习笔记2
关于for循环,其实质是利用被循环对象的__iter__,或者__getitem__属性接口,由可迭代对象得到迭代器.for循环就是不断调用.next(),直到最终捕获到stop. import re ...
- Python168的学习笔记1
在对list的条件选择有两种常用方法,直接使用filter函数,就是filter(func,sequence);另外一种就是迭代操作,类似 x for x in sequence func.这两种方法 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
随机推荐
- 使用qt写的进制转换器
没有使用什么数据结构,直接使用qt自带的进制转换函数, 实时出结果,代码在后面的链接中,由于初学qt,好多不会,代码构造就有点乱 截图如下
- CodeForces 1096E: The Top Scorer
一道经典组合数学+容斥题. 题目传送门:CF1096E. 题意简述: \(p\) 个人,每个人有得分 \(a_i\). 总得分 \(\sum a_i = s\). 第一个人得分 \(a_1 \ge r ...
- 对于Linux平台下C语言开发中__sync_函数的认识(转)
reference:http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html#Atomic-Builtins A built-i ...
- MySQL增量备份与恢复实例【转】
小量的数据库可以每天进行完整备份,因为这也用不了多少时间,但当数据库很大时,就不太可能每天进行一次完整备份了,这时候就可以使用增量备份.增量备份的原理就是使用了mysql的binlog日志.本次操作的 ...
- MySQL 执行SQL脚本 报ERROR 1231 (42000)的解决办法【转】
今天在source mysqldump 备份文件时,发现导入的过程中报如下的错误: ERROR 1231 (42000): Variable 'time_zone' can't be set to t ...
- 002_安装第三方APP好的站点及解除安全与隐私限制
一.解除安全与隐私限制的任何来源. http://bbs.feng.com/read-htm-tid-10714286.html 接下来,我们就打开终端,然后输入以下命令: sudo spctl ...
- 1->小规模集群架构规划
"配置无人值守批量安装系统(Cobbler)" "搭建PPTP VPN/ NTP/Firewalld内部共享上网 " "搭建跳板机服务jumpserv ...
- 32 Profiling Go Programs 分析go语言项目
Profiling Go Programs 分析go语言项目 24 June 2011 At Scala Days 2011, Robert Hundt presented a paper titl ...
- 神经网络中的激活函数tanh sigmoid RELU softplus softmatx
所谓激活函数,就是在神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端.常见的激活函数包括Sigmoid.TanHyperbolic(tanh).ReLu. softplus以及softma ...
- Java线程:新特征-有返回值的线程《转》
原始文章 在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写.或者干脆绕过这道坎,走别的路了. 现在Java终于有可返回值的任务(也可以叫做线程)了. ...