1. 前言Hello,大家好,,我是小張~ 在日常與 Python 打交道過程中,,不可避免會(huì)涉及到數(shù)據(jù)讀寫業(yè)務(wù),例如做爬蟲時(shí),,需要將爬取的數(shù)據(jù)首先存儲(chǔ)到本地然后再做下一步處理,;做數(shù)據(jù)可視化分析時(shí),需要將數(shù)據(jù)從硬盤中讀入內(nèi)存上,,再進(jìn)行后續(xù)的數(shù)據(jù)清洗,、可視化、建模等步驟 對數(shù)據(jù)進(jìn)行讀寫操作時(shí),,對于存儲(chǔ)對象我們有多種選擇,,最方便的是本地文檔類型:csv,、txt 等,,優(yōu)點(diǎn)是方便簡單、但弊端也很明顯:文檔型數(shù)據(jù)易丟失,、損壞,,刪除不可恢復(fù),且不方便多人間數(shù)據(jù)共享,; 另一大類存儲(chǔ)對象為數(shù)據(jù)庫,,目前比較流性的持久化數(shù)據(jù)庫為 MongoDB 和Mysql ;對比文檔存儲(chǔ),,數(shù)據(jù)庫最大的優(yōu)勢就是:數(shù)據(jù)不易丟失且易檢索,,面對龐大數(shù)據(jù)量僅幾行 在本期 Python 教程中,,將匯總一下有關(guān) Python 數(shù)據(jù)讀寫方式,涉及到的存儲(chǔ)對象有四類:txt,、csv,、MongoDV以及MySQL 2. Python 文檔讀寫關(guān)于本地文檔數(shù)據(jù)讀寫,本文列出兩類常見文檔類型:txt 及 csv ,;測試數(shù)據(jù)來源于鏈家二手房房源,,關(guān)于房源數(shù)據(jù)爬取詳情參考舊聞 Python 采集了3000 條北京二手房數(shù)據(jù),看看我都分析出來了啥,? 2.1 txt 讀寫 在本文介紹的幾種數(shù)據(jù)存儲(chǔ)對象中,,txt 讀寫是最簡單的一種,關(guān)于讀寫方式這里我就不作詳細(xì)介紹了,,不太了解的小伙伴可以參考下方測試代碼: # txt 數(shù)據(jù)源,,需記得加上 encoding='utf-8' 參數(shù),防止亂碼 txt 讀寫整個(gè)流程都是借助文件流方式完成的,,需要注意的是在讀寫過程中若出現(xiàn)中文亂碼情況,,需要加上參數(shù) 2.2 csv 讀寫 與 txt 相比 ,Python愛好者更偏愛把數(shù)據(jù)存入 csv 或 xlsx,,后者相對更為規(guī)范,,尤其是面向數(shù)值數(shù)據(jù),對于編程基礎(chǔ)并不好的同學(xué),,不需要 Python 借助 Excel 可以直接進(jìn)行可視化分析,; csv 在 Python 中有多種讀寫方式,下面實(shí)例中我列出其中常見的兩種,,一種是基于 csv 數(shù)據(jù)讀取 讀取測試時(shí),是從 csv 中讀入數(shù)據(jù) 方法一,,借助
方法二,,借助 csvPath = 'save.csv' csv 數(shù)據(jù)寫入 方法一,借助
方法二,借助 dataSource = open('data.txt',encoding='utf-8',mode='r') 關(guān)于用 Python 操作 csv 文件,,個(gè)人更喜歡用 pandas 來處理,,在 pandas 中數(shù)據(jù)皆以 關(guān)于 pandas 的基礎(chǔ)使用,,詳情可參考舊文:
3 Python 數(shù)據(jù)庫讀寫介紹完 Python 在本地文檔中的讀寫方式,,下面將介紹一下 Python 在數(shù)據(jù)庫中的處理;這里我選擇了 MongoDB 和 MySQL 兩個(gè)比較流行的數(shù)據(jù)庫,;在正式介紹之前請確保大家的環(huán)境已經(jīng)配好 3.1 MongoDB 數(shù)據(jù)讀寫 Mongodb 是一類面向文檔型數(shù)據(jù)庫,,屬于 NoSQL 陣營,也就是常說的非關(guān)系型數(shù)據(jù)庫,, 存儲(chǔ)時(shí)將數(shù)據(jù)接受由 鍵值對 (key=> value) 組成,,類似于 JSON 對象;也就是說 Python 與 Mongodb 數(shù)據(jù)交互時(shí),,需要以字典形式傳遞 那如何用Python來連接 MongoDB 呢,?這個(gè)不需要我們擔(dān)心,Python 最大的優(yōu)勢就可以依賴龐大的第三方庫 ,,借助 MongoDB 連接初始化 本地端 MongoDB 下載完成之后,,數(shù)據(jù)庫默認(rèn)端口為
代碼中 MongoDB 數(shù)據(jù)寫入 之前在介紹 MongoDB 時(shí),提到它的數(shù)據(jù)結(jié)構(gòu)由鍵值對組成,,類似于 JSON 對象,;因此在數(shù)據(jù)插入步驟中,需將數(shù)據(jù)轉(zhuǎn)化為字典形式(列名作為 key,,列值作為 value),,數(shù)據(jù)樣式如下: 數(shù)據(jù)寫入 Python 代碼實(shí)現(xiàn) dataSource = open('data.txt',encoding='utf-8',mode='r') 數(shù)據(jù)寫入后效果如下,,這里 GUI 工具用的是官方提供的 mongo compass pymongo 數(shù)據(jù)插入可通過兩種方式完成
MongoDB 數(shù)據(jù)讀取 MongoDB 數(shù)據(jù)讀取,可以理解為無條件查詢,,通過 數(shù)據(jù)讀取方式如下:
除了無條件查詢外,,可以加入一些篩選條件,,如下:
for post_data in collection.find()[:10]:
for post_data in collection.find({'community':'西宏苑'}): 關(guān)于如何用 pymongo 操作 MongoDB, 還有許多實(shí)用方法,,這里我只介紹了其中一小部分,,詳情可參考 pymongo 官方文檔: https://pymongo./en/stable/api/pymongo/collection.html 3.2 MySQL 讀寫 MySQL屬于典型的關(guān)系型數(shù)據(jù)庫,數(shù)據(jù)表間可以通過外鍵銜接,,這樣當(dāng)一個(gè)字段在某個(gè)表中得到更新,,其它相關(guān)聯(lián)數(shù)據(jù)表中也會(huì)進(jìn)行自動(dòng)更新,數(shù)據(jù)增刪改查業(yè)務(wù)邏輯主要通過 SQL 語句完成,, python 操控 MySQL 目前有兩類庫可以使用,,MySQLdb 和 pymysql ,兩個(gè)庫操作mysql 方法相似,,核心功能都是依賴于 sql 語句,,可以認(rèn)為提供了一個(gè)Python 與 MySQL 連接的接口, 在本文中選擇 pymysql 作 為測試庫,,用 pymysql 進(jìn)行讀寫之前,,建議通過命令行測試一下本機(jī)上 MySQL 數(shù)據(jù)庫是否可用,測試方法如下: MySQL 連接初始化 pymysql 連接 MySQL 時(shí)需要配置 ip,、端口,、用戶名、密碼,、及數(shù)據(jù)庫名稱(與 MongoDB 不同的是,,MySQL 數(shù)據(jù)庫需要提前創(chuàng)建好)
MySQL數(shù)據(jù)插入 向 MySQL 中插入數(shù)據(jù)時(shí),可以新建一個(gè)表,,也可以基于原有數(shù)據(jù)庫中的表進(jìn)行插入,,在下面測試代碼中我采用的是前者 # 創(chuàng)建 table data_table MySQL 數(shù)據(jù)插入代碼
數(shù)據(jù)插入效果如下,下面是用 Navicat作為 mysql 的UI界面: 從上面代碼塊可以了解到,,在pymysql 連接 MySQL 并將數(shù)據(jù)插入步驟中,,業(yè)務(wù)功能主要是依賴于 SQL 語句,也就是說想要用 python 操作 MySQL 的話,,需要提前掌握一下 SQL 語句 INSERT data_table (title,community,citydirct,houseinfo,dateinfo,taglist,totalprice,unitprice) VALUES ' + \ pymysql 操作 MySQL 需要注意的是,,每執(zhí)行完 一條或多條 sql 語句時(shí),需要
MySQL數(shù)據(jù)查詢 通過 import pymysql 除了無條件查詢外,,當(dāng)然也可以通過 除了基本讀寫之外,借助 sql 語句也可以做一些更新,、刪除等業(yè)務(wù)功能,;麻煩一點(diǎn)的就是,用 Python 拼接 sql 語句時(shí)會(huì)容易出現(xiàn)語法錯(cuò)誤,,這一點(diǎn)遠(yuǎn)不如 Java,, 在 Java 中有封裝好的 jar 包,對一些常見的增刪改查業(yè)務(wù)只需要傳入?yún)?shù),,不需要關(guān)心 sql 語句是否合法,,非常方便! 與 Java 相比,,Python 與 MySQL 交互操作還有很大的改進(jìn)空間 ~ 小結(jié)本文分別介紹了Python 面向四類存儲(chǔ)對象的讀寫方式,,分為文檔和數(shù)據(jù)庫兩大類,從 txt 到 csv,,從MongoDB 到 MySQL,,涵蓋日常生活中的大部分業(yè)務(wù)場景;對于大部分學(xué)習(xí)Python的小伙伴,,為了便捷性,,用 Python 處理數(shù)據(jù)時(shí)都會(huì)首選 txt、csv 等文檔作為存儲(chǔ)對象,; 但是一旦數(shù)據(jù)量變得龐大,,或者存儲(chǔ)數(shù)據(jù)的文檔很多時(shí),文檔對象存儲(chǔ)的弊端就會(huì)顯露出來:文檔數(shù)據(jù)易被誤刪,、數(shù)據(jù)間關(guān)系容易混淆,,文檔亂放等問題;此時(shí)數(shù)據(jù)庫的優(yōu)勢就能顯露出來: 1,,龐大的數(shù)據(jù)存儲(chǔ)量,,在MySQL3.22 版本中 單表最大存儲(chǔ)空間為 4GB ,一個(gè)數(shù)據(jù)庫可以創(chuàng)建多個(gè)數(shù)據(jù)表,,MySQL 也可以創(chuàng)建多個(gè)數(shù)據(jù)庫,,如下圖所示 2,數(shù)據(jù)表間關(guān)系清晰,,容易快速檢索,;一個(gè)數(shù)據(jù)庫就可以把多個(gè)數(shù)據(jù)表匯聚到一處,方便查找,;伴隨數(shù)據(jù)量增加,,還可以根據(jù)屬性、使用場景將數(shù)據(jù)劃分為多個(gè)數(shù)據(jù)庫進(jìn)行存儲(chǔ),; 3,,數(shù)據(jù)庫中數(shù)據(jù)如果誤刪的話還可通過技術(shù)手段恢復(fù),,因此了解數(shù)據(jù)庫數(shù)據(jù)基本操作方式還是很有必要的,! 好了,,關(guān)于Python 數(shù)據(jù)存儲(chǔ)就介紹到這里了,如果內(nèi)容對你有幫助的話不妨點(diǎn)個(gè)贊來鼓勵(lì)一下我~ 最后感謝大家的閱讀,,我們下期見 ,! 小張Python 分享一些小案例來學(xué) Python,;爬蟲、小游戲,、GUI,、Web開發(fā)都有涉獵! 85篇原創(chuàng)內(nèi)容 公眾號(hào) |
|