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()