最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Python中數(shù)據(jù)的多種存儲形式

 更新時間:2023年05月06日 14:51:25   作者:塵世風(fēng)  
這篇文章主要介紹了Python中數(shù)據(jù)的多種存儲形式,主要有JSON?文件存儲、CSV?文件存儲、關(guān)系型數(shù)據(jù)庫存儲及非關(guān)系型數(shù)據(jù)庫存儲,本文給大家介紹的非常詳細,需要的朋友可以參考下

1 JSON 文件存儲

JSON,全稱為 JavaScript Object Notation, 也就是 JavaScript 對象標(biāo)記,它通過對象和數(shù)組的組合來表示數(shù)據(jù),構(gòu)造簡潔但是結(jié)構(gòu)化程度非常高,是一種輕量級的數(shù)據(jù)交換格式。本節(jié)中,我們就來了解如何利用 Python 保存數(shù)據(jù)到 JSON 文件。

1. 對象和數(shù)組

在 JavaScript 語言中,一切都是對象。因此,任何支持的類型都可以通過 JSON 來表示,例如字符串、數(shù)字、對象、數(shù)組等,但是對象和數(shù)組是比較特殊且常用的兩種類型,下面簡要介紹一下它們。

對象:它在 JavaScript 中是使用花括號 {} 包裹起來的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為 {key1:value1, key2:value2, ...} 的鍵值對結(jié)構(gòu)。在面向?qū)ο蟮恼Z言中,key 為對象的屬性,value 為對應(yīng)的值。鍵名可以使用整數(shù)和字符串來表示。值的類型可以是任意類型。

數(shù)組:數(shù)組在 JavaScript 中是方括號 [] 包裹起來的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為 ["java", "javascript", "vb", ...] 的索引結(jié)構(gòu)。在 JavaScript 中,數(shù)組是一種比較特殊的數(shù)據(jù)類型,它也可以像對象那樣使用鍵值對,但還是索引用得多。同樣,值的類型可以是任意類型。

所以,一個 JSON 對象可以寫為如下形式:

[{
    "name": "Bob",
    "gender": "male",
    "birthday": "1992-10-18"
}, {
     "name": "Selina",
    "gender": "female",
    "birthday": "1995-10-18"
}]

由中括號包圍的就相當(dāng)于列表類型,列表中的每個元素可以是任意類型,這個示例中它是字典類型,由大括號包圍。

JSON 可以由以上兩種形式自由組合而成,可以無限次嵌套,結(jié)構(gòu)清晰,是數(shù)據(jù)交換的極佳方式。

import json
data = [{
    'name': '王偉',
    'gender': '男',
    'birthday': '1992-10-18'
},{
    'name': '張三',
    'gender': '男',
    'birthday': '1993-10-18'
}]
# w 寫入  a  r
with open('data.json', 'w', encoding='utf-8') as file:
    file.write(json.dumps(data, indent=2, ensure_ascii=False))
# json.dumps  把字典轉(zhuǎn)json字符串
# .loads   反序列化  把json字符串轉(zhuǎn)字典
# indent 格式化
# ensure_ascii=False  中文不編碼
# java 必須要雙引號

2 CSV 文件存儲

CSV,全稱為 Comma-Separated Values,中文可以叫作逗號分隔值或字符分隔值,其文件以純文本形式存儲表格數(shù)據(jù)。該文件是一個字符序列,可以由任意數(shù)目的記錄組成,記錄間以某種換行符分隔。每條記錄由字段組成,字段間的分隔符是其他字符或字符串,最常見的是逗號或制表符。不過所有記錄都有完全相同的字段序列,相當(dāng)于一個結(jié)構(gòu)化表的純文本形式。它比 Excel 文件更加簡潔,XLS 文本是電子表格,它包含了文本、數(shù)值、公式和格式等內(nèi)容,而 CSV 中不包含這些內(nèi)容,就是特定字符分隔的純文本,結(jié)構(gòu)簡單清晰。所以,有時候用 CSV 來保存數(shù)據(jù)是比較方便的。本節(jié)中,我們來講解 Python 讀取和寫入 CSV 文件的過程。

1. 寫入

這里先看一個最簡單的例子:

import csv
with open('data.csv', 'w') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(['id', 'name', 'age'])
    writer.writerow(['10001', 'Mike', 20])
    writer.writerow(['10002', 'Bob', 22])
    writer.writerow(['10003', 'Jordan', 21])

首先,打開 data.csv 文件,然后指定打開的模式為 w(即寫入),獲得文件句柄,隨后調(diào)用 csv 庫的 writer 方法初始化寫入對象,傳入該句柄,然后調(diào)用 writerow 方法傳入每行的數(shù)據(jù)即可完成寫入。

如果想修改列與列之間的分隔符,可以傳入 delimiter 參數(shù),其代碼如下:

import csv
with open('data.csv', 'w') as csvfile:
    writer = csv.writer(csvfile, delimiter=' ')
    writer.writerow(['id', 'name', 'age'])
    writer.writerow(['10001', 'Mike', 20])
    writer.writerow(['10002', 'Bob', 22])
    writer.writerow(['10003', 'Jordan', 21])

2.多行寫入

調(diào)用 writerows 方法同時寫入多行,此時參數(shù)就需要為二維列表,例如:

import csv
with open('data.csv', 'w') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(['id', 'name', 'age'])
    writer.writerows([['10001', 'Mike', 20], ['10002', 'Bob', 22], ['10003', 'Jordan', 21]])

3.字典寫入

用字典來表示。在 csv 庫中也提供了字典的寫入方式,示例如下:

import csv
with open('data.csv', 'w') as csvfile:
    fieldnames = ['id', 'name', 'age']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerow({'id': '10001', 'name': 'Mike', 'age': 20})
    writer.writerow({'id': '10002', 'name': 'Bob', 'age': 22})
    writer.writerow({'id': '10003', 'name': 'Jordan', 'age': 21})

4. 爬蟲采集入庫

import httpx
res = httpx.get('https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1647605552864&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=&keyword=python&pageIndex=2&pageSize=10&language=zh-cn&area=cn')
# 數(shù)據(jù)變字典格式
items = res.json()
item = items.get('Data')['Posts']  # 列表形式
data = []
for i in item:
    title =  i.get('RecruitPostName'),
    times =  i.get('LastUpdateTime'),
    data.append([title[0],times[0]])
import csv
with open('data2.csv', 'w',encoding='utf-8') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(['id', 'name'])
    writer.writerows(data)

3 關(guān)系型數(shù)據(jù)庫存儲

關(guān)系型數(shù)據(jù)庫是基于關(guān)系模型的數(shù)據(jù)庫,而關(guān)系模型是通過二維表來保存的,所以它的存儲方式就是行列組成的表,每一列是一個字段,每一行是一條記錄。表可以看作某個實體的集合,而實體之間存在聯(lián)系,這就需要表與表之間的關(guān)聯(lián)關(guān)系來體現(xiàn),如主鍵外鍵的關(guān)聯(lián)關(guān)系。多個表組成一個數(shù)據(jù)庫,也就是關(guān)系型數(shù)據(jù)庫。

關(guān)系型數(shù)據(jù)庫有多種,如 SQLite、MySQL、Oracle、SQL Server、DB2 等。

1. 準(zhǔn)備工作

在開始之前,請確保已經(jīng)安裝好了 MySQL 數(shù)據(jù)庫并保證它能正常運行,而且需要安裝好 Py MySQL 庫。如果沒有安裝找班主任老師拿包

下載地址;https://dev.mysql.com/downloads/mysql/

安裝包:https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.9-winx64.zip

參考地址:http://m.fzitv.net/article/265139.htm

2. 連接數(shù)據(jù)庫

這里,首先嘗試連接一下數(shù)據(jù)庫。假設(shè)當(dāng)前的 MySQL 運行在本地,用戶名為 root,密碼為 123456,運行端口為 3306。這里利用 PyMySQL 先連接 MySQL,然后創(chuàng)建一個新的數(shù)據(jù)庫,名字叫作 spiders,代碼如下:

import pymysql  
db = pymysql.connect(host='localhost',user='root', password='123456', port=3306)  
cursor = db.cursor()   # 游標(biāo)
cursor.execute('SELECT VERSION()')  
data = cursor.fetchone()  
print('Database version:', data)  
cursor.execute("CREATE DATABASE spiders DEFAULT CHARACTER SET utf8")  
db.close()

3. 創(chuàng)建數(shù)據(jù)表

import pymysql  
db = pymysql.connect(host='localhost', user='root', password='123456', port=3306, db='spiders')
cursor = db.cursor()
sql = 'CREATE TABLE IF NOT EXISTS students (id VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, age INT NOT NULL, PRIMARY KEY (id))'
cursor.execute(sql)
db.close()

4. 插入數(shù)據(jù)

插入、更新和刪除操作都是對數(shù)據(jù)庫進行更改的操作,而更改操作都必須為一個事務(wù),所以這些操作的標(biāo)準(zhǔn)寫法就是:

import pymysql
id = '20220315'
user = '菲菲'
age = 20
db = pymysql.connect(host='localhost', user='root', password='123456', port=3306, db='spiders')
cursor = db.cursor()
# %s 動態(tài)傳參
sql = 'INSERT INTO students(id, name, age) values(% s, % s, % s)'
try:
    cursor.execute(sql, (id, user, age))
    db.commit()
except:
    db.rollback()
db.close()

5. 字典數(shù)據(jù)插入

data = {
    'id':'20220315',
    'name': '菲菲',
    'age': 20
}
keys = ', '.join(data.keys())
values = ', '.join(['% s'] * len(data))
sql = 'INSERT INTO students({keys}) VALUES ({values})'.format( keys=keys, values=values)
try:
   if cursor.execute(sql, tuple(data.values())):
       print('Successful')
       db.commit()
except:
    print('Failed')
    db.rollback()
db.close()

6. 爬蟲數(shù)據(jù)采集入庫

4 非關(guān)系型數(shù)據(jù)庫存儲

1. MongoDB簡介

MongoDB 是由 C++ 語言編寫的非關(guān)系型數(shù)據(jù)庫,是一個基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng),其內(nèi)容存儲形式類似 JSON 對象,它的字段值可以包含其他文檔、數(shù)組及文檔數(shù)組,非常靈活。在這一節(jié)中,我們就來看看 Python 3 下 MongoDB 的存儲操作。

安裝地址

參考:https://www.runoob.com/mongodb/mongodb-linux-install.html

2. 連接 MongoDB

連接 MongoDB 時,我們需要使用 PyMongo 庫里面的 MongoClient。一般來說,傳入 MongoDB 的 IP 及端口即可,其中第一個參數(shù)為地址 host,第二個參數(shù)為端口 port(如果不給它傳遞參數(shù),默認是 27017)

import pymongo
# 如果是云服務(wù)的數(shù)據(jù)庫   用公網(wǎng)IP連接
client = pymongo.MongoClient(host='localhost', port=27017)

3. 指定數(shù)據(jù)庫和表

db = client.test
collection = db['students']  # 都可以

4. 插入數(shù)據(jù)

插入數(shù)據(jù)。對于 students 這個集合,新建一條學(xué)生數(shù)據(jù),這條數(shù)據(jù)以字典形式表示:

student = {
    'id': '20170101',
    'name': 'Jordan',
    'age': 20,
    'gender': 'male'
}
result = collection.insert(student)

4.1. 插入多條數(shù)據(jù)

student1 = {
    'id': '20170101',
    'name': 'Jordan',
    'age': 20,
    'gender': 'male'
}
student2 = {
    'id': '20170202',
    'name': 'Mike',
    'age': 21,
    'gender': 'male'
}
result = collection.insert([student1, student2])
print(result)

5. 爬蟲數(shù)據(jù)采集入庫

# encoding: utf-8
import pymongo
client = pymongo.MongoClient(host='localhost', port=27017)
db = client.test
collection = db['students']  # 都可以
import httpx
def get_data():
    res = httpx.get('https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1647605552864&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=&keyword=python&pageIndex=2&pageSize=10&language=zh-cn&area=cn')
    # 數(shù)據(jù)變字典格式
    items = res.json()
    item = items.get('Data')['Posts']  # 列表形式
    for i in item:
        if isinstance(i,dict):
            collection.insert_one(i)
get_data()

到此這篇關(guān)于Python中數(shù)據(jù)的多種存儲形式的文章就介紹到這了,更多相關(guān)Python數(shù)據(jù)存儲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • VSCode Python開發(fā)環(huán)境配置的詳細步驟

    VSCode Python開發(fā)環(huán)境配置的詳細步驟

    這篇文章主要介紹了VSCode Python開發(fā)環(huán)境配置的詳細步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • python 實現(xiàn)文件的遞歸拷貝實現(xiàn)代碼

    python 實現(xiàn)文件的遞歸拷貝實現(xiàn)代碼

    今天翻電腦時突然發(fā)現(xiàn)有個存了很多照片和視頻的文件夾,想起來是去年換手機(流行的小5)時拷出來的??戳藥讖堈掌?,往事又一幕幕的浮現(xiàn)在腦海,好吧,我是個感性的人
    2012-08-08
  • python自動化測試之破解圖文驗證碼

    python自動化測試之破解圖文驗證碼

    這篇文章介紹了python自動化測試之破解圖文驗證碼的解決方案,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • 關(guān)于Python網(wǎng)絡(luò)爬蟲框架scrapy

    關(guān)于Python網(wǎng)絡(luò)爬蟲框架scrapy

    這篇文章主要介紹了關(guān)于Python網(wǎng)絡(luò)爬蟲框架scrapy,爬蟲框架是實現(xiàn)爬蟲功能的一個軟件結(jié)構(gòu)和功能組件的集合,需要的朋友可以參考下
    2023-04-04
  • Python學(xué)習(xí)之時間包使用教程詳解

    Python學(xué)習(xí)之時間包使用教程詳解

    本文主要介紹了Python中的內(nèi)置時間包:datetime包?與?time包?,通過學(xué)習(xí)時間包可以讓我們的開發(fā)過程中對時間進行輕松的處理,快來跟隨小編一起學(xué)習(xí)一下吧
    2022-03-03
  • Python選擇排序、冒泡排序、合并排序代碼實例

    Python選擇排序、冒泡排序、合并排序代碼實例

    這篇文章主要介紹了Python選擇排序、冒泡排序、合并排序代碼實例,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下
    2015-04-04
  • python書籍信息爬蟲實例

    python書籍信息爬蟲實例

    這篇文章主要為大家詳細介紹了python書籍信息爬蟲示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Python如何在終端彩色打印輸出

    Python如何在終端彩色打印輸出

    大家好,本篇文章主要講的是Python如何在終端彩色打印輸出,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • 使用Python給PDF添加文本超鏈接和圖片超鏈接

    使用Python給PDF添加文本超鏈接和圖片超鏈接

    超鏈接是指向特定資源的鏈接,作為一種有效的導(dǎo)航工具,它能夠幫助讀者快速訪問相關(guān)信息,通過在PDF文檔中添加文本超鏈接和圖片超鏈接,你可以顯著提升文檔的互動性和用戶體驗,這篇文章將詳細介紹如何使用Python給PDF添加文本超鏈接和圖片超鏈接,需要的朋友可以參考下
    2025-03-03
  • Python3.0與2.X版本的區(qū)別實例分析

    Python3.0與2.X版本的區(qū)別實例分析

    這篇文章主要介紹了Python3.0與2.X版本的區(qū)別,包含了一些常見的區(qū)別及分析,還有筆者的一些感悟,需要的朋友可以參考下
    2014-08-08

最新評論

长武县| 南雄市| 南阳市| 随州市| 凌源市| 富裕县| 黔江区| 陈巴尔虎旗| 武汉市| 金平| 新余市| 平邑县| 平乐县| 高雄市| 永仁县| 台中市| 平果县| 泰安市| 铅山县| 蒲江县| 寿光市| 留坝县| 凉城县| 四川省| 松江区| 巴青县| 都昌县| 华亭县| 潼南县| 延吉市| 金昌市| 勐海县| 伊金霍洛旗| 手机| 镇原县| 宜章县| 教育| 云浮市| 霍邱县| 武邑县| 庆云县|