日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python数据处理之一:数据读取

發布時間:2023/12/20 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python数据处理之一:数据读取 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python數據處理之一:數據讀取

數據可以存儲成許多不同的格式和文件類型。某些格式存儲的數據很容易被機器處理,而
另一些格式存儲的數據則容易被人工讀取。微軟的Excel、 Word 文檔等屬于后者,而 CSV、JSON和 XML 文件則屬于前者。

一、供機器讀取的數據

以易于機器理解的方式來存儲數據的文件格式,通常被稱作機器可讀的(machine readable)。常見的機器可讀格式包括:

? 逗號分隔值(Comma-Separated Values,CSV)

? JavaScript 對象符號(JavaScript Object Notation,JSON)

? 可擴展標記語言(eXtensible Markup Language,XML)

1、CSV數據

CSV 文件(簡稱為 CSV)是指將數據列用逗號分隔的文件。文件的擴展名是 .csv。

1.1、數據格式

以下是來自世界衛生組織(WHO)的全球各國的預期壽命數據(下載地址):

Indicator,PUBLISH STATES,Year,WHO region,Country,Sex,Display Value,Numeric,Low,High,Comments Life expectancy at birth (years),Published,2000,Eastern Mediterranean,Afghanistan,Male,54.6,54.60243,,,"WHO life table method: World Population Prospects, 2017 revision (United Nations, Population Division)" Life expectancy at birth (years),Published,2001,Eastern Mediterranean,Afghanistan,Male,55.3,55.29549,,,"WHO life table method: World Population Prospects, 2017 revision (United Nations, Population Division)" Life expectancy at birth (years),Published,2002,Eastern Mediterranean,Afghanistan,Male,56.5,56.45111,,,"WHO life table method: World Population Prospects, 2017 revision (United Nations, Population Division)" Life expectancy at birth (years),Published,2003,Eastern Mediterranean,Afghanistan,Male,56.9,56.94814,,,"WHO life table method: World Population Prospects, 2017 revision (United Nations, Population Division)" Life expectancy at birth (years),Published,2004,Eastern Mediterranean,Afghanistan,Male,57.4,57.36723,,,"WHO life table method: World Population Prospects, 2017 revision (United Nations, Population Division)" Life expectancy at birth (years),Published,2005,Eastern Mediterranean,Afghanistan,Male,57.8,57.81836,,,"WHO life table method: World Population Prospects, 2017 revision (United Nations, Population Division)" Life expectancy at birth (years),Published,2006,Eastern Mediterranean,Afghanistan,Male,58,58.04882,,,"WHO life table method: World Population Prospects, 2017 revision (United Nations, Population Division)" Life expectancy at birth (years),Published,2007,Eastern Mediterranean,Afghanistan,Male,58.4,58.38523,,,"WHO life table method: World Population Prospects, 2017 revision (United Nations, Population Division)" Life expectancy at birth (years),Published,2008,Eastern Mediterranean,Afghanistan,Male,59,59,,,"WHO life table method: World Population Prospects, 2017 revision (United Nations, Population Division)" Life expectancy at birth (years),Published,2009,Eastern Mediterranean,Afghanistan,Male,59.5,59.45721,,,"WHO life table method: World Population Prospects, 2017 revision (United Nations, Population Division)" Life expectancy at birth (years),Published,2010,Eastern Mediterranean,Afghanistan,Male,59.9,59.90372,,,"WHO life table method: World Population Prospects, 2017 revision (United Nations, Population Division)" Life expectancy at birth (years),Published,2011,Eastern Mediterranean,Afghanistan,Male,60.5,60.45234,,,"WHO life table method: World Population Prospects, 2017 revision (United Nations, Population Division)" Life expectancy at birth (years),Published,2012,Eastern Mediterranean,Afghanistan,Male,60.9,60.94415,,,"WHO life table method: World Population Prospects, 2017 revision (United Nations, Population
1.2、數據導入

1、將數據導入成python的列表形式:

import csvcsvfile = open(r'data-text.csv', mode='r') reader = csv.reader(csvfile)lis = [] for row in reader:lis.append(row)print(lis)

2、將數據導入成python的字典形式:

import csvcsvfile = open(r'data-text.csv', mode='r') reader = csv.DictReader(csvfile)lis = [] for row in reader:lis.append(row)print(lis)

2、JSON數據

JSON 數據是數據傳輸最常用的格式之一。人們喜歡這一格式,是因為它結構清晰、易于
閱讀且方便解析。

網站在向頁面的 JavaScript 傳輸數據時,JSON 也是最常用的數據格式之一。

2.1、數據格式

把以上csv數據整理成json形式:

[{"Indicator":"Life expectancy at birth (years)","PUBLISH STATES":"Published","Year":1990,"WHO region":"Europe","World Bank income group":"High-income","Country":"Andorra","Sex":"Both sexes","Display Value":77,"Numeric":77.00000,"Low":"","High":"","Comments":""},......]
2.2、數據導入
import jsonjson_data = open(r'data-text.json').read() data = json.loads(json_data)lis = [] for item in data:lis.append(item)print(lis)

導入后的形式:字典形式({‘Indicator’: ‘Life expectancy at birth (years)’, ‘PUBLISH STATES’: ‘Published’, ‘Year’: 2000, ‘WHO region’: ‘Europe’, ‘World Bank income group’: ‘High-income’, ‘Country’: ‘Andorra’, ‘Sex’: ‘Both sexes’, ‘Display Value’: 80, ‘Numeric’: 80.0, ‘Low’: ‘’, ‘High’: ‘’, ‘Comments’: ‘’})

3、XML數據

可擴展標記語言(標準通用標記語言的子集)是一種簡單的數據存儲語言。

使用一系列簡單的標記描述數據,而這些標記可以用方便的方式建立,雖然可擴展標記語言占用的空間比二進制數據要占用更多的空間,但可擴展標記語言極其簡單易于掌握和使用。

2.1、數據格式

把以上csv數據整理成XML形式:

<GHO ...><Data><Observation FactID="4543040" Published="true"Dataset="CYCU" EffectiveDate="2014-03-27" EndDate="2900-12-31"><Dim Category="COUNTRY" Code="SOM"/><Dim Category="REGION" Code="EMR"/><Dim Category="WORLDBANKINCOMEGROUP" Code="WB_LI"/><Dim Category="GHO" Code="WHOSIS_000002"/><Dim Category="YEAR" Code="2012"/><Dim Category="SEX" Code="FMLE"/><Dim Category="PUBLISHSTATE" Code="PUBLISHED"/><Value Numeric="46.00000"><Display>46</Display></Value></Observation><Observation FactID="4209598" Published="true"Dataset="CYCU" EffectiveDate="2014-03-25" EndDate="2900-12-31"><Dim Category="WORLDBANKINCOMEGROUP" Code="WB_HI"/><Dim Category="YEAR" Code="2000"/><Dim Category="SEX" Code="BTSX"/><Dim Category="COUNTRY" Code="AND"/><Dim Category="REGION" Code="EUR"/><Dim Category="GHO" Code="WHOSIS_000001"/><Dim Category="PUBLISHSTATE" Code="PUBLISHED"/><Value Numeric="80.00000"><Display>80</Display></Value></Observation></Data> </GHO>
2.2、數據導入
from xml.etree import ElementTree as ETtree = ET.parse('data-text.xml') root = tree.getroot()data = root.find('Data')all_data = []for observation in data:record = {}for item in observation: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_valueall_data.append(record) print(all_data)

分析:
1、通過root = tree.getroot()先獲取樹的根元素GHO標簽。

2、在縱覽文件結構時可以看到,每一“行”數據都包含在一個 Observation 標簽中,在每一個 Observation 節點內,這些數據行又分別包含在 Dim、Value 和 Display 節點中。而 Observation 標簽又在Data標簽內,所以我們要通過data = root.find(‘Data’)獲取Data標簽。

3、下面就要通過遍歷 Observation 標簽,Observation 標簽下的結構為:

<Dim Category="WORLDBANKINCOMEGROUP" Code="WB_HI"/><Dim Category="YEAR" Code="2000"/><Dim Category="SEX" Code="BTSX"/><Dim Category="COUNTRY" Code="AND"/><Dim Category="REGION" Code="EUR"/><Dim Category="GHO" Code="WHOSIS_000001"/><Dim Category="PUBLISHSTATE" Code="PUBLISHED"/><Value Numeric="80.00000"><Display>80</Display></Value>

遍歷一下:

from xml.etree import ElementTree as ETtree = ET.parse('data-text.xml') root = tree.getroot()data = root.find('Data')for observation in data:for item in observation:print(item.attrib)print(item.attrib.keys())

分析:
1、通過item.attrib獲得的Observation 標簽下的樣式是:{‘Category’: ‘YEAR’, ‘Code’: ‘2012’}字典形式;
2、通過item.attrib.keys()獲取以上字典的鍵列表:dict_keys([‘Category’, ‘Code’])。
3、有兩種不同的輸出:dict_keys([‘Category’, ‘Code’]) 和dict_keys([‘Numeric’]) ,所以為了或缺每一行數據,我們要進行條件選擇。

二、Excel文件讀取

1、安裝第三方庫(xlrd)

1、Python 庫有一個匯總在線目錄,叫作 PyPI(https://pypi.python.org/pypi),里面保存了大量
的 Python 包及其元數據和文檔。在里面可以搜索我們需要的庫進行安裝。

2、pip安裝:pip 是 Python 包管理工具,該工具提供了對Python 包的查找、下載、安裝、卸載的功能。Python 2.7.9 + 或 Python 3.4+ 以上版本都自帶 pip 工具。pip 官網:https://pypi.org/project/pip/。

3、安裝xlrd:win + r 輸入cmd打開dos窗口,在窗口輸入以下代碼進行xlrd的安裝:

pip install xlrd

2、解析Excel數據

2.1 數據格式

2.2 數據導入

1、我們需要導入 xlrd 庫,然后用 Python 打開 Excel 工作簿。我們將打開的文件保存在變量 book 中:

import xlrd book = xlrd.open_workbook('SOWC 2014 Stat Tables_Table 9.xlsx')

2、查看excel文件中有幾個工作表:

import xlrd book = xlrd.open_workbook('SOWC 2014 Stat Tables_Table 9.xlsx')for sheet in book.sheets():print(sheet.name)

遍歷后得知有兩個工作表:Data Notes、Table 9

3、我們要找的工作表是 Table 9。所以我們把這個名字添加到腳本中:

import xlrdbook = xlrd.open_workbook('SOWC 2014 Stat Tables_Table 9.xlsx')sheet = book.sheet_by_name('Table 9') print(sheet)

這里要注意:sheet的名字有可能含有空格,在excel中無法發現,所以一定要保證book.sheet_by_name(‘Table 9’)中的sheet名和excel中的sheet名一致,否則就會報錯。

4、遍歷所有的行:

import xlrdbook = xlrd.open_workbook('SOWC 2014 Stat Tables_Table 9.xlsx')sheet = book.sheet_by_name('Table 9')for i in range(sheet.nrows):print(sheet.row_values(i))
2.3獲取目標數據

現在我們能夠查看每一行的內容,我們需要從中提取出需要的信息。假設我們要提取的是童工和童婚的統計數據。

1、確定提取后數據的格式:

{ u'Afghanistan': { 'child_labor': { 'female': [9.6, ''], 'male': [11.0, ''], 'total': [10.3, '']}, 'child_marriage': { 'married_by_15': [15.0, ''], 'married_by_18': [40.4, ''] } }, u'Albania': { 'child_labor': { 'female': [9.4, u' '], 'male': [14.4, u' '], 'total': [12.0, u' ']}, 'child_marriage': { 'married_by_15': [0.2, ''], 'married_by_18': [9.6, ''] } }, ... }

2、提取國家名字作為字典的鍵:

import xlrdbook = xlrd.open_workbook('SOWC 2014 Stat Tables_Table 9.xlsx')sheet = book.sheet_by_name('Table 9')data = {} for i in range(14, sheet.nrows):row = sheet.row_values(i)country = row[1]data[country] = {}print(data)

輸出結構是:{‘Afghanistan’: {}, ‘Albania’: {}, ‘Algeria’: {}, ‘Andorra’: {}, ‘Angola’: {}, ‘Antigua and Barbuda’: {}, ‘Argentina’: {}, ‘Armenia’: {}, ‘Australia’: {}, ‘Austria’: {}}…

3、給每個國家為鍵值的字典提取對應內容:

import xlrd import pprintbook = xlrd.open_workbook('SOWC 2014 Stat Tables_Table 9.xlsx')sheet = book.sheet_by_name('Table 9')data = {} for i in range(14, sheet.nrows):row = sheet.row_values(i)country = row[1]data[country] = {'child_labor': {'total': [row[4], row[5]], 'male': [row[6], row[7]], 'female': [row[8], row[9]]},'child_marriage': {'married_by_15': [row[10], row[11]], 'married_by_18': [row[12], row[13]]}}if country == 'Zimbabwe':breakpprint.pprint(data)

分析:導入pprint模塊是為了讓輸出內容規整,易于查看。

三、PDF文件讀取

建議盡量不要使用pdf類型的文件來讀取,除非沒有辦法,方法如下:

import sys import importlib importlib.reload(sys)from pdfminer.pdfparser import PDFParser,PDFDocument from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.converter import PDFPageAggregator from pdfminer.layout import LTTextBoxHorizontal,LAParams from pdfminer.pdfinterp import PDFTextExtractionNotAllowed'''解析pdf 文本,保存到txt文件中 ''' path = r'2.pdf' def parse():fp = open(path, 'rb') # 以二進制讀模式打開#用文件對象來創建一個pdf文檔分析器praser = PDFParser(fp)# 創建一個PDF文檔doc = PDFDocument()# 連接分析器 與文檔對象praser.set_document(doc)doc.set_parser(praser)# 提供初始化密碼# 如果沒有密碼 就創建一個空的字符串doc.initialize()# 檢測文檔是否提供txt轉換,不提供就忽略if not doc.is_extractable:raise PDFTextExtractionNotAllowedelse:# 創建PDf 資源管理器 來管理共享資源rsrcmgr = PDFResourceManager()# 創建一個PDF設備對象laparams = LAParams()device = PDFPageAggregator(rsrcmgr, laparams=laparams)# 創建一個PDF解釋器對象interpreter = PDFPageInterpreter(rsrcmgr, device)# 循環遍歷列表,每次處理一個page的內容for page in doc.get_pages(): # doc.get_pages() 獲取page列表interpreter.process_page(page)# 接受該頁面的LTPage對象layout = device.get_result()# 這里layout是一個LTPage對象 里面存放著 這個page解析出的各種對象 一般包括LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等等 想要獲取文本就獲得對象的text屬性,for x in layout:if (isinstance(x, LTTextBoxHorizontal)):with open(r'22.txt', 'a') as f:results = x.get_text()print(results)f.write(results + '\n')if __name__ == '__main__':parse()

總結

以上是生活随笔為你收集整理的Python数据处理之一:数据读取的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。