1. 程式人生 > >python儲存資料的方式

python儲存資料的方式

python儲存資料的方式
2017年10月13日 23:38:10 Nick_Spider 閱讀數:59286 標籤: redis 資料庫 爬蟲 儲存 結構 更多
個人分類: 資料庫 爬蟲 python

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/weixin_39198406/article/details/78231430
在python程式設計開發中,總是不可避免的遇到資料儲存的問題,下面就介紹python與幾種資料儲存方式互動的方法。

json檔案
json是一種輕量級的資料交換格式。採用完全獨立於程式語言的文字格式來儲存和表示資料。層次結構簡潔而清晰,易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提升網路傳輸效率。
最主要的是,通過json這個包可以很方便的解決無論是py2還是py3中的編碼問題,json的內容結構也近似於python中的字典和列表,操作起來特別方便。

import json

# 此時有一個json檔案,結構大概是 [{},{},{}...] 開啟這個檔案

# 使用json load讀取檔案內容,然後可以直接用列表或者字典的方式去操作con這個變數

con = json.loads(content)

# 那麼如何儲存為json檔案呢?

# 使用dumps將列表序列化並且轉換為unicode編碼,儲存的時候,就可以存你最喜歡的utf-8了

lis = [{},{},{}...]

data = json.dumps(lis, ensure_ascii=False)

f.write(data.encode('utf-8'))

csv檔案
轉換為csv檔案後,我們就可以直接用excel開啟拉圖表了

import csv

# 開啟檔案

with open(filename, 'w') as f:

writer = csv.writer(f) # 構造寫入器

data = ('1','2','3') # 填寫三格

data = ('','','3') # 填寫一格,前兩格空起來

data = ('1','') # 填寫第一格,後面無論多少格都空起來

writer.writerow(data) # writerow每執行一次,寫入一行 注意其中的引數data需要是一個元組
# 注意,在windows中,開啟檔案需要使用
with open(filename, 'w', newline='') as f:
# 否則每寫一行都會多一個空行
# 原因是 windows中換行符號是 \n\r ,csv庫中並沒有做特別的處理,所以會產生空行

MySQL資料庫
應該是最常用的操作了,使用mysql的優點是看資料真的很直觀(如果使用GUI程式的話)

匯入包略微不一樣

@python3

import pymysql

@python2

import MySQLdb

 

# 建立連線 注意資料庫寫入資料時資料的編碼

conn = MySQLdb.connect(host='localhost', port=3306, db='test',

user='root', passwd='', charset='utf8')

 

# 新建遊標 遊標操作sql語句

cur = conn.cursor()

result = cur.execute("insert into students(name) values('Jack')")

result = cur.execute("insert into students(name,age) values(%s,%s)", params)

 

# sql對資料庫資料有改變的時候,使用commit()提交,否則不生效

conn.commit()

 

# 返回資料到python,使用fetchone和fetchall從記憶體中取資料,取了一個清空一個

cur.execute('select * from students where id between 1 and 5')

result=cur.fetchone()

result=cur.fetchall()

 

# 最後記得關閉連線

cur.close()

conn.close()

Redis資料庫
優點是方便,速度快,需要注意的是取出的資料是二進位制資料,一般需要轉為字串再操作。
操作大全: python-redis操作大全

import redis

 

# 建立連線

client = redis.Redis(host='lcoalhost', port=6379)

 

# 操作資料

client.set('nums', [1,2,3,4,5])

result = client.get('name')

 

# 使用事務(避免失敗操作導致資料只操作了一半)

pipe = client.pipeline()

pipe.set('name', 'Jack')

pipe.execute()

Mongdb資料庫
優點是不在乎資料結構,需要注意的是取出來的時候要寫個指令碼整理一下。

import pymongo

 

# 建立連線 指定資料表

client = pymongo.MongoClient('localhost', 27017)

test1_db = client.test1

sheet_stu = db.stu

 

# 操作資料

info = {name:'Jack',age:18}

info_id = stu.insert_one(info).inserted_id

cur_list = [cur for cur in stu.find()]

count = stu.count()