Python 可以通过各种库去解析我们常见的数据。其中 csv 文件以纯文本形式存储表格数据,以某字符作为分隔值,通常为逗号;xml 可拓展标记语言,很像超文本标记语言 Html ,但主要对文档和数据进行结构化处理,被用来传输数据;json 作为一种轻量级数据交换格式,比 xml 更小巧但描述能力却不差,其本质是特定格式的字符串;Microsoft Excel 是电子表格,可进行各种数据的处理、统计分析和辅助决策操作,其数据格式为 xls、xlsx。接下来主要介绍通过 Python 简单解析构建上述数据,完成数据的“珍珠翡翠白玉汤”。
Python 解析构建 csv
通过标准库中的 csv 模块,使用函数 reader()、writer() 完成 csv 数据基本读写。
import csvwith open('readtest.csv', newline='') as csvfile:reader = csv.reader(csvfile)for row in reader:print(row)with open('writetest.csv', 'w', newline='') as csvfile:writer = csv.writer(csvfile)writer.writerrow("onetest")writer.writerows("someiterable")
其中 reader() 返回迭代器, writer() 通过 writerrow() 或 writerrows() 写入一行或多行数据。两者还可通过参数 dialect 指定编码方式,默认以 excel 方式,即以逗号分隔,通过参数 delimiter 指定分隔字段的单字符,默认为逗号。
在 Python3 中,打开文件对象 csvfile ,需要通过 newline='' 指定换行处理,这样读取文件时,新行才能被正确地解释;而在 Python2 中,文件对象 csvfile 必须以二进制的方式 'b' 读写,否则会将某些字节(0x1A)读写为文档结束符(EOF),导致文档读取不全。
除此之外,还可使用 csv 模块中的类 DictReader()、DictWriter() 进行字典方式读写。
import csvwith open('readtest.csv', newline='') as csvfile: reader = csv.DictReader(csvfile) for row in reader: print(row['first_test'], row['last_test'])with open('writetest.csv', 'w', newline='') as csvfile: fieldnames = ['first_test', 'last_test'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() writer.writerow({'first_test': 'hello', 'last_test': 'wrold'}) writer.writerow({'first_test': 'Hello', 'last_test': 'World'}) #writer.writerows([{'first_test': 'hello', 'last_test': 'wrold'}, {'first_test': 'Hello', 'last_test': 'World'}])
其中 DictReader() 返回有序字典,使得数据可通过字典的形式访问,键名由参数 fieldnames 指定,默认为读取的第一行。
DictWriter() 必须指定参数 fieldnames 说明键名,通过 writeheader() 将键名写入,通过 writerrow() 或 writerrows() 写入一行或多行字典数据。
Python 解析构建 xml
通过标准库中的 xml.etree.ElementTree 模块,使用 Element、ElementTree 完成 xml 数据的读写。
from xml.etree.ElementTree import Element, ElementTreeroot = Element('language')root.set('name', 'python')direction1 = Element('direction')direction2 = Element('direction')direction3 = Element('direction')direction4 = Element('direction')direction1.text = 'Web'direction2.text = 'Spider'direction3.text = 'BigData'direction4.text = 'AI'root.append(direction1)root.append(direction2)root.append(direction3)root.append(direction4)#import itertools#root.extend(chain(direction1, direction2, direction3, direction4))tree = ElementTree(root)tree.write('xmltest.xml')
新闻热点
疑难解答