Python数据处理:CSV、JSON、XML文件的处理
-
常见的机器可读格式包括:
-
逗号分隔符(Comma-Separated Values,CSV)
-
JavaScript对象符号(JavaScript Object Notation,JSON)
-
可扩展标记语言(Extensible Markup Language,XML)
-
1.CSV数据的读取
如果文件扩展名是.tsv,那么里面包含的很可能是TSV数据。如果文件的扩展名是.csv,那么里面包含的可能是CSV数据,也可能是TSV数据。
import csv
#第一个参数为CSV文件地址,第二个参数表示只读方式,返回的是一个文件对象
csvfile = open('data-text.csv', 'r')
# 以字典的形式读取文件,当csv.reader时以列表形式查看数据
reader = csv.DictReader(csvfile)
# 逐行打印
for row in reader:
print(row)
运行结果:
2.JSON数据的读取
如果文件扩展名是.json,则里面包含的可能是JSON数据。如果文件扩展名是.js,则可能是JavaScript文件,在少数情况下也可能是命名不规范的JSON文件。
import json
#JSON文件地址,read方法读取文件保存在json_data变量中,得到的是一个字符串
json_data = open('data-text.json').read()
# 载入json数据到data变量
data = json.loads(json_data)
# 遍历打印
for item in data:
print(item)
运行结果:
注意:Python的json库与csv库处理输入数据的方式不同,json库的loads函数接受字符串作为参数,不接收文件最为参数。csv库的reader函数接收打开的文件作为参数。
3.XML数据的读取
如果文件扩展名是.xml,那么它是XML数据。如果文件扩展名是.html或.xhtml,有时也可用XLM解析器来解析。XML用标签和属性来保存数据,类似于JSON中的键。
# 导入解析XML文件的内置库(还可以用lxml库或minidom库)
from xml.etree import ElementTree as ET
# parse方法对文件数据进行解析并返回一个Python对象保存在tree变量中。
tree = ET.parse('data-text.xml')
# 调用getroot函数获取树的根元素
root = tree.getroot()
# print(dir(root)) 查看root对象有哪些方法
# print(list(root))#查看根元素的子元素,返回一个有Element对象构成的列表
# find方法利用标签名来搜索子元素
data = root.find('Data')
all_data = []#保存数据的空列表
# 每一个observation元素代表一行数据
for observation in data:
record = {}#保存数据的空字典
for item in observation:
# print(item)
# attrib可以返回每一个节点的属性
lookup_key = list(item.attrib.keys())[0]
if lookup_key == 'Numeric':
rec_key = 'NUMERIC'
rec_value = item.attrib['Numeric']
else:
rec_key = item.attrib[lookup_key]
rec_value = item.attrib['Code']
record[rec_key] = rec_value#将每一个键值对添加到record字典中
all_data.append(record)#将每一条数据记录添加到all_data列表中
print(all_data)
运行结果:
注意:不同的XML树结构具有不同的数据提取过程。
小结:
文件类型 | 文件扩展名 | Python库 |
---|---|---|
CSV、TSV | .csv、.tsv | csv库 |
JSON | .json、.js | json库 |
参考文献:
《data wrangling with Python》Jacqueline kazil
示例文件:
链接:https://cloud.189.cn/t/AVNZRrfmiAZj
访问码:0963