shelvepicklepython
Ⅰ python中的writepickle語句,怎麼用
pickle是為了序列化/反序列化一個對象的,可以把一個對象持久化存儲。
比如你有一個對象,想下次運行程序的時候直接用,可以直接用pickle打包存到硬碟上。或者你想把一個對象傳給網路上的其他程序,可以用pickle打包,然後傳過去,那邊的python程序用pickle反序列化,就可以用了。
用法上,它主要有兩個函數:load和mp,load是從序列化之後的數據中解出來,mp是把對象序列化。看看幫助就好了,很簡單的。
Ⅱ 如何持久化python對象
1. 使用(dbhash/bsddb, dbm, gdbm, mbdbm 等)以及它們的"管理器"( anydbm )。只提供了 Python 字元串的永久性儲存. 提供一個類似字典和文件的對象,可以完成字元串的永久性存儲。
2. 使用marshal和pickle來序列化python對象,並具備存儲到介質上的功能。兩者的區別在於:marshal只能處理簡單的Python對象,包括數字、序列、映射、以及代碼對象;而pickle還可以處理遞歸對象,被不同地方多次引用的對象,以及用戶定義的類和實例。其中,pickle有一個C語言實現的版本——cPickle,具有更高的效率,建議使用cPickle。
3. 雖然pickle提供非常強大的功能了,已經可以滿足我們大部分的需求了,但是,人類的需求是無止境的,光序列化不行啊,只用 pickle 不能解決命名和查找 pickle 文件這樣的問題,要是可以對序列化的對象提供管理功能,支持並發訪問就好了。因此,人們發明了shelve模塊,它是前兩者的綜合。shelve模塊使用anydbm模塊尋找合適的DBM模塊,然後使用cPickle來完成對象存儲轉換過程。shelve模塊允許對資料庫文件進行並發的讀訪問,但不允許共享讀/寫訪問。
4. 還有一種方案,是在IBM的網站上看到的。那就是ZODB了。ZODB比簡單的 pickle 文件更健壯以及更具有可伸縮性。ZODB是一個針對Python的Z對象資料庫,是一個健壯的、多用戶的和面向對象的資料庫系統,它能夠存儲和管理任意復雜的 Python 對象,並支持事務操作和並發控制。其實,ZODB也依靠Python 的本機序列化能力,而且要有效地使用 ZODB,必須充分了解 pickle。
5. 最後一隻知道的解決持久性問題的方法是 Prevayler,PyPerSyst 將整個對象系統保存在內存中,並通過不時地將系統快照 pickle 到磁碟以及維護一個命令日誌(通過此日誌可以重新應用最新的快照)來提供災難恢復。所以,盡管使用 PyPerSyst 的應用程序受到可用內存的限制,但好處是本機對象系統可以完全裝入到內存中,因而速度極快,而且實現起來要比如 ZODB 這樣的資料庫簡單,ZODB 允許對象的數目比同時在能內存中所保持的對象要多。
Ⅲ 怎麼閱讀python模塊的實例文檔
shelve,cPickle模塊
close() 關閉文件對象
flush() 刷新文件的緩沖區。緩沖區包含等待寫入或文件中讀取的信息。「刷新「就是執行實際的讀取或寫入操作
isatty() 如果文件對象是tty(終端)設備,就返回1
read([size]) 從文件中讀取數據。
readline([size]) 從文件中讀取一行
readlines([size]) 從文件中讀取多行
seek(offset[,location]) 使文件位置移動offset個位元組。如果沒有指定location,文件位置從文件起始處移動。如是指定了location,就從指定位置移動。
tell() 返迴文件的當前位置
truncate([size]) 刪除文件中的數據。如果沒有指定size,就刪除所有數據;如果指定了size,就最多隻刪除指定的位元組數。
write(output) 將字元串output寫入文件
writeline(outputlist) 將outputlist中的每個字元串寫入文件
writelines() 寫入多行數據
一.創建順序訪問文件
寫入文件
import sys
try:
file=open("client.dat","w")
except IOError,message:
print >> sys.stderr, "File could not be opened",message
sys.exit(1)
print "Enter the accout,name and age."
while 1:
try:
accountline=raw_input("?")
except EOFError:
break
else:
print >>file,accountline
file.close()
讀取數據
import sys
try:
file=open("client.dat","r")
except IOError:
print >> sys.stderr, "File could not be opened"
sys.exit(1)
records=file.readlines()
print "Account",ljust(10)
print "Name",ljust(10)
print "age",ljust(10)
for record in records:
fields=record.split()
print fields[0].ljust(10),
print fields[1].ljust(10),
print fields[2].ljust(10),
file.close()
shelve模塊應用
模擬隨機訪問文件:
import sys
import shelve
try:
coutcredit=shelve.open("credit.dat")
except IOError:
print >> sys.stderr,"File could not be opened"
sys.exit(1)
print "Enter account number (1 to 100,0 to end input)"
while 1:
accountNumber=int(raw_input("\nEnter account number\n?"))
if 0 < accountNumber <= 100:
print "Enter lastname, Firetname,balance"
currentData=raw_input("?")
outCredit[str{accountNumber)]=currentDdata.split()
elif accountNumber==0:
break
outCredit.close()
cPickle模塊應用
註:cPickle模塊的執行效率高於pickle
寫文件
import sys
import cPickle
try:
coutcredit=open("credit.dat","w")
except IOError:
print >> sys.stderr,"File could not be opened"
sys.exit(1)
print "Enter account number (1 to 100,0 to end input)"
inputlist=[]
while 1:
try:
accountline=raw_input("?")
except EOFErrot:
break
else:
inputlist.append(accountline.split())
cPickle.mp(inputlist,outCredit)
outCredit.close()
讀出數據
import sys
import cPickle
try:
outcredit=open("credit.dat","r")
except IOError:
print >> sys.stderr,"File could not be opened"
sys.exit(1)
records=cPickle.load(outcredit)
outcredit.close()
for record in records:
print record[0].ljust(15),
print record[1].ljust(10),
print record[2].ljust(20)
Ⅳ python還有哪些類似json,shelve之類的文件模塊
pickle比較類似json
Ⅳ python哪些標准庫
標准庫比較多 功能也不同:
標准庫
sys
系統相關的參數和函數。 sys 庫一般用來訪問和修改系統相關信息,比如查看 python 版本、系統環境變數、模塊信息和 python 解釋器相關信息等等。
os
操作系統介面模塊。這個庫提供了訪問操作系統相關依賴的方式,比如輸入輸出操作、讀寫操作、操作系統異常錯誤信息、進程線程管理、文件管理、調度程序等等。
re
正則表達式操作。這個庫是我喜歡並且經常會用到的庫,在對大量字元串進行處理的時候用正則表達式是最快速有效的方式,但是正則表達式的學習曲線較高,有興趣的朋友可以訪問這個網站學習。
math
數學函數庫。 math 庫提供了對 C 語言標準定義的數學函數訪問,比如數論(Number-theoretic)的各種表示方法、冪和對數函數(Power and logarithmic functions)、三角函數(Trigonometric functions)、常量圓周率(π)和自然常數(e)等等。
random
生成偽隨機數。
偽隨機數與隨機數(真隨機數)不同的是執行環境,隨機數是真實世界中通過物理過程實踐得出結論,而偽隨機數是通過計算機的特定演算法生成的數,所以這個過程是可預測的、有規律的,只是循環周期較長,並不能與現實場景相切合。
random庫提供生成隨機數,可以模擬現實世界中隨機取數、隨機抽獎等等。
logging
日誌記錄工具。這個庫提供了對應用程序和庫函數的日誌記錄,日常開發中我們經常需要通過日誌列印出當前程序的運行狀態,實時查看可能出現的堆棧異常和錯誤信息。
json
Json 編碼和解碼器。 json 庫提供了對 json 數據的支持,日常開發中我們做前後端分離需要對傳輸數據 json 進行序列化和反序列化操作,以保證對數據的完整性和有效性,而序列化和反序列化其實就是編碼和解碼的過程。
pickle
Python 對象序列化庫。 pickle 庫支持對 python 對象進行序列化和反序列化操作,當我們需要將處理好的對象保存到文件或資料庫中時,就可以將其序列化成二進制數據,從而更好的保存起來。
shelve
Python 對象持久化。簡單的數據存儲方案。
socket
底層網路介面。 socket(套接字) 庫提供了標準的BSD(伯克利套接字) Socket API,可以通過訪問底層操作系統 Socket 的相關介面進行網路通訊。
datetime
基本日期和時間類型庫。該庫提供了各種簡單和復雜的方式處理日期和時間,日常我們會用時間測算時間消耗、復雜度,對存儲的創建時間和修改時間也需要進一步說明,對計時器的描述和控制也需要用到該庫。
hashlib
安全哈希和消息摘要。摘要演算法 其實就是對某些數據進行加密(不可逆的加密演算法),因為被加密的數據無法破解,所以就能防止被篡改。常見的摘要演算法有 MD5、SHA1,一般我們會用 MD5 對用戶口令進行加密,防止盜用後被輕易破解;而 SHA1 與 MD5 類似,但是 SHA1 會產生更長的長度,也更安全,但是演算法的復雜性通常伴隨著存儲空間和時間的消耗。要說比SHA1更長的字元長度,還有 SHA224、SHA256、SHA384 和 SHA512,看名字就能知道。
大家都知道無論演算法生成的字元長度如何都有可能發生碰撞(被破解),這是不可避免的,所以具體場景具體情況而定。
configparser
配置文件解析器。 configparser 庫可以輕松定製配置文件,通過解析配置文件的信息我們就可以全局訪問相關配置。
urllib
URL 處理模塊。 urllib 庫集成了處理 URLs(統一資源定位符)的各種模塊:
URL urllib.request URL robots.txt urllib 庫對訪問網路有很好的支持,提供了對數據的訪問和處理、文件的上傳和下載、記錄 cookie 和 session 等等。
itertools
為高效循環而創建迭代器的函數。 itertools 庫也是經常需要用到,當我們要對某些數進行 for-in 時就需要先將其處理成一個可迭代對象,之後我們才能進行遍歷操作。
collections
容器數據類型庫。 collections 庫提供了對所有容器數據類型的支持,包括 dict, list, set 和 tuple。我們可以用此庫對不同數據類型進行操作,常有的函數方法有這些:
namedtuple() 創建命名元組子類的工廠函數 deque 類似列表(list)的容器,實現了在兩端快速添加(append)和彈出(pop) ChainMap 類似字典(dict)的容器類,將多個映射集合到一個視圖裡面 Counter 字典的子類,提供了可哈希對象的計數功能 OrderedDict 字典的子類,保存了他們被添加的順序 defaultdict 字典的子類,提供了一個工廠函數,為字典查詢提供一個默認值 UserDict 封裝了字典對象,簡化了字典子類化 UserList 封裝了列表對象,簡化了列表子類化 UserString 封裝了列表對象,簡化了字元串子類化 functools
高階函數和可調用對象上的操作。該庫主要調用高階函數,是常規函數的一種補充。目前庫中包含以下幾種函數:
cmp_to_key lru_cache total_ordering partial partialmethod rece singledispatch update_wrapper wraps threading
線程並行庫。 threading 庫支持線程和多線程的操作,針對多線程並發的問題可以給數據加同步鎖,一次只能讓一個線程處理數據,從而避免出現數據讀寫混亂。
在 CPython 解釋器上,因為GIL(全局解釋器鎖)鎖機制的存在的,被設計成線程安全,所以同一時間只能執行一個線程,這就導致了多線程不能發揮出計算機的多核特性。
multiprocessing
進程並行庫。 multiprocessing 庫與 threading 庫很類似,不同的是進程庫可以創建子進程避開 GIL,從而彌補線程庫存在的劣勢和發揮計算機的多核特性。
timeit
測量小代碼片段的執行時間。此庫主要用來計算運行代碼的時間消耗,支持多種方式傳入參數。
atexit
退出處理器。當處理一個函數需要立馬退出時可以使用該庫。
abc
抽象基類。 abc 庫定義抽象基類,以便其他類派生出新類。比如 collections 容器庫中就有此派生出的 collections.abc 類,派生出來的類可以進一步實現。
asyncio
非同步IO庫。 asyncio 庫是一個用 async/await 關鍵字編寫並發的庫,為多個非同步框架提供基礎功能,能夠實現高性能的網路、Web伺服器、資料庫連接和分布式任務隊列等。
淺層和深層復制操作。 庫提供對對象的拷貝,我們都知道要製作對象副本,是無法通過簡單值傳遞創建新變數的方式做到,因為新變數所指向的內存空間依舊是原對象本身,所以對新變數進行任何操作都會改變原對象。那麼, 庫就提供了製作對象副本的各種方法,會開辟一個新的內存空間存放副本對象,修改操作不會對原對象有任何干預。
csv
csv(Comma Separated Values)文件讀寫庫。此庫支持以純文本的形式存儲表格數據(數字和文本)。
operator
標准運算符替代函數庫。此庫是將 python 自有的運算符作為有效函數,比如表達式 x+y 可以用函數 operator.add(x, y) 表示;比如表達式 a*b 可以用函數 operator.mul(a, b) 表示,等等。
enum
枚舉庫。 enum 庫支持創建枚舉類來存儲大量同類型的不可變常量,以便其他函數調用。創建出來的枚舉類是可迭代對象,所以可以用 for-in 枚舉出所有常量。
heapq
堆隊列演算法。這個模塊提供了堆隊列演算法的實現,也稱為優先隊列演算法。優先隊列中的每個元素都有各自的優先順序,優先順序最高的元素最先得到服務。所以當我們要求前n最大/最小值的時候就可以用此演算法來實現, heapq 庫中也提供了相應函數實現。
http
HTTP 模塊。 http 模塊是一個包,收集了多個處理超文本傳輸協議的模塊:
urllib.request http 模塊通過 http.HTTPStatus 枚舉定義了HTTP狀態碼 以及相關聯消息。
profile、pstats
性能分析工具。 profile 模塊提供了 profile 和 cProfile 兩種不同實現的性能分析工具,可用來描述程序各個部分的執行時間和頻率,統計後的信息可以通過 pstats 模塊保存並使用。
ssl
TLS/SSL(傳輸安全協議)。此模塊提供對安全協議的支持,通過應用上下文,可將 TLS(傳輸層安全性協議)或其前身 SSL(安全套接層)支持安全協議,能為互聯網通信提供安全和數據完整性保障。一般 HTTPS 協議都支持 TLS/SSL 加密。
unitest
單元測試框架。 unitest 庫常用於單元測試,受到 JUnit 和其他主流測試庫的啟發, unitest 庫的功能和函數與它們有著相似的風格。
uuid
UUID庫。 uuid 庫主要用途是生成隨機字元串,庫中有多個版本的 UUID 對象方法,比如版本 1、3、4 和 5 的 uuid1() 、 uuid3() 、 uuid4() 和 uuid5() 。需要注意的是,如果要生成隨機字元串,可以使用 uuid1() 和 uuid4() ,但是 uuid1() 會存在隱私風險,因為生成的原理里邊包含用戶訪問計算機的網路地址,而 uuid4() 是通過隨機字元生成。
希望可以幫助到你。
Ⅵ python shelve模塊
應該是你的文件命名問題,不要命名為shelve.py
這樣的話,你import載入的是你本身的文件,你的文件並沒有open這個屬性
Ⅶ python里pickle是什麼意思
pickle模塊是對Python對象結構進行二進制序列化和反序列化的協議實現,就是把Python數據變成流的形式。