天天看點

Python資料解析

前言

Python語言在人工智能以及計算機視覺領域十分熱門,它處理資料的能力很出色,相容各種常用的資料類型解析。程式無非就是一系列資料操作行為的集合,從輸入到輸出以求得人們期望的結果。Python在執行效率和開發效率中找到平衡點,很适合快速開發算法複雜,資料處理量大的應用。高效率的資料處理能力離不開結構化的資料互動,python當然對CSV,JSON、XML這些常用的結構化資料類型是完美相容的。

Python CSV解析

CSV逗号分隔值(Comma-Separated Values,CSV,有時也稱為字元分隔值,因為分隔字元也可以不是逗号),它通常用于在電子表格軟體和純文字之間互動資料,其檔案以純文字形式存儲表格資料(數字和文本)。從真正意義上說它并不是結構化的資料,而僅僅是一些用逗号分隔的原始字元串。

Python中對于特定的一些簡單CSV檔案用str.split(‘,’)就能滿足要求,但是不推薦這麼做,因為某些字段值可能存在嵌套關系。Python有專門用于解析和生成的CSV的庫,如csv子產品。

Python應用csv樣例

#! /usr/bin/env python

import csv
from distutils.log import warn as printf
DATA = (
	('id', 'name', 'age','sex','wage'),
	(1, '小李', 24, 'm', '8000'),
	(2, '小王', 25, 'm', '6000'),
	(3, '小杜', 23, 'w', '6000'),
)
printf('*** Write CSV DATA')
f = open('wageinfo.csv','w',newline='')
writer = csv.writer(f)
for record in DATA:
	writer.writerow(record)
	print(record)
f.close()

printf('read csv data')
f = open('wageinfo.csv','r')
reader = csv.reader(f)
for id,name,age,sex,wage in reader:
	printf('id %s: name: %s age: %s sex: %s wage: %s' %(id,name,age,sex,wage))
f.close()
           

Python JSON資料解析

JSON(JavaScript Object Notation, JS 對象簡譜)是輕量級的資料交換方式,也是以人類易讀懂的方式傳輸結構化資料,這使得它在網絡傳輸方面應用很廣,前後端的資料交換格式通常也是JSON,python這門在網路爬蟲方面性能優異的語言當然也會完美支援JSON的解析,在程式中引用json子產品即可。

JSON本質是字元串,它通過鍵/值(key/value)的方式将資料結構化,鍵/值對組合中的鍵名寫在前面并用雙引号 "" 包裹,使用冒号 : 分隔,然後緊接着值,當然也可以進行多層嵌套以實作更為複雜的資料結構類型。

Python應用JSON樣例

#! /usr/bin/env python

from distutils.log import warn as printf
from json import dumps
from pprint import pprint

BOOKs = {
	'2019010101':{
		'tilte':'Core Python Programming',
		'edition':2,
		'year':2019,
	},
	'2019010102':{
	'title':'Python web Development with Django',
	'authors':['Jeff Forcier','Pual Bissex','Wesley Chun'],
	'year':2019,
	},
	'2019010103':{
	'title':'Python Fundamenttals',
	'year':2019,
	},
}
printf(' RAW DICT')
printf('BOOKs')

printf('\n PRETTY_PRINTEDDICT')
pprint(BOOKs)

printf('\n RAW JSON')
printf(dumps(BOOKs))

printf('\n PRETTY_PRINTEDJSON')
printf(dumps(BOOKs,indent=4))
           

Python XML資料解析

XML 指可擴充标記語言(eXtensible Markup Language),是一種比較老的結構化資料格式,相比JSON來說還是比較難一眼就看清它的資料内容的,在進階語言程式中通常有相應的解析器來實作對XML格式化資料操作。

XML文檔與HTML非常類似,但XML并不是HTML的替代,它們設計目的不同,XML 被設計用來傳輸和存儲資料,其焦點是資料的内容,而HTML 被設計用來顯示資料,其焦點是資料的外觀。但它們的結構類似,由一些元素和屬性構成。

Python應用XML樣例

#! /usr/bin/env python

from xml.etree.ElementTree import Element,SubElement,tostring
from xml.dom.minidom import parseString

BOOKs = {
	'2019010101':{
		'tilte':'Core Python Programming',
		'edition':2,
		'year':2019,
	},
	'2019010102':{
	'title':'Python web Development with Django',
	'authors':['Jeff Forcier','Pual Bissex','Wesley Chun'],
	'year':2019,
	},
	'2019010103':{
	'title':'Python Fundamenttals',
	'year':2019,
	},
}

books = Element('books')
for isbn,info in BOOKs.items():
	book = SubElement(books,'book')
	info.setdefault('authors','Wesley Chun')
	info.setdefault('edition',1)
	for key,val in info.items():
		SubElement(book,key).text = ', '.join(str(val).split(':'))
		
xml = tostring(books)
print (' RAW XML')
print (xml)

print ('\nPRETTY_PRINTED XML')
dom = parseString(xml)
print (dom.toprettyxml('  '))

print (' FLAT STRUCTURE')
for elmt in books.getiterator():
	print (elmt.tag, '_',elmt.text)
	
print ('\n TITLES ONLY')
for book in books.findall('.//title'):
	print (book.text)
           

總結

Python在人工智能以及計算機視覺領域十分熱門,它強大的類庫支援對快速開發應用提供了可能性,相比于C/C++開發來說,它隻需要一個簡單的檔案編輯工具,甚至連編譯都不用就能運作代碼,帶你探索新世界。它既有近似于底層C/C++的運作效率,也有JAVA這種進階語言的面向對象開發效率,簡直perfect,記2018年末于廣州。