日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python语法基础14 pickle与json模块 异常处理

發布時間:2023/12/16 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python语法基础14 pickle与json模块 异常处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

將變量從內存變成可存儲或者是可傳輸的這個過程我們稱之為序列化。
將變量的內容從序列化的對象中重新讀入到內存的過程我們稱之為反序列化。

需求:
1.將字典存到demo.txt文件中
2.從demo.txt文件中將字典重新讀取

dict1 = {“name”:“韓梅梅”,“age”:19}

print(dict1)

dict1[“age”] = 20

with open(“demo.txt”,“w”,encoding=“utf-8”) as f:

f.write(str(dict1))

with open(“demo.txt”,“r”,encoding=“utf-8”) as f2:
str1 = f2.read()
print(str1)
# print(type(str1))
dict2 = eval(str1)
print(dict2)
print(type(dict2))

class Card:
def init(self, cardnum, password, money, lock=False):
self.cardnum = cardnum
self.password = password
self.money = money
self.lock = lock

def obj2dict(card):
return {“cardnum”:card.cardnum,“password”:card.password,“money”:card.money,“lock”:card.lock}

def dict2obj(d1):
return Card(d1[“cardnum”],d1[“password”],d1[“money”],d1[“lock”])

if name == ‘main’:
card = Card(“101110”,“111”,10000)
# card2 = Card(“101112”,“111”,10000)
# card3 = Card(“101113”,“111”,10000)
# cardlist = [card,card2,card3]
# print(card)
# print(str(card))
‘’’
1.將card對象寫入到文件中
2.將對象讀取出來,讀取出來是Card類型
‘’’
with open(“card.txt”,“w”,encoding=“utf-8”) as f:
# for card in cardlist:
carddict = obj2dict(card)
f.write(str(carddict)+"\n")

with open("card.txt","r",encoding="utf-8") as f2:clist = []for line in f2.readlines():dict1 = eval(line)card1 = dict2obj(dict1)clist.append(card1)# print(card1)# print(card1.cardnum)# print(card1.money) print(clist)

import pickle模塊

pickle模塊可以將任意的對象序列化成二進制的字符串寫入到文件中。
還可以從文件中讀取并且轉為寫入時候類型。

pickle.dumps(obj)
功能:將obj進行序列化

pickle.dump(obj,f)
參數一:被序列化的對象
參數二:打開的文件
功能:將obj序列化并且存入到打開的文件中

pickle.loads(bytes)
功能:將二進制的字符串轉為對象

pickle.load(f)
功能:將文件中的內容讀取并且轉為對象

class Card:
def init(self, cardnum, password, money, lock=False):
self.cardnum = cardnum
self.password = password
self.money = money
self.lock = lock

dict1 = {“name”:“韓梅梅”,“age”:19}
card = Card(“101110”, “111”, 10000)
card2 = Card(“101112”, “111”, 10000)
card3 = Card(“101113”, “111”, 10000)
cardlist = [card, card2, card3]

with open(“pickledemo.txt”,“wb”) as f:

# f.write(pickle.dumps(cardlist))

pickle.dump(card2,f)

with open(“pickledemo.txt”,“rb”) as f2:
# obj = pickle.loads(f2.read())
# print(obj)
# print(type(obj))
# print(obj[0].cardnum)
obj = pickle.load(f2)
print(obj)

json模塊
json模塊提供的方法,可以直接將python基本數據類型序列化為json字符串。
也可以將json字符串轉為python的基本數據類型。

json.dumps(obj,default)
obj:被序列化的對象
default:函數,將對象轉為字典的函數
功能:將對象序列化為json字符串

json.dump(obj,f,default)
obj:被序列化的對象
f:打開的文件對象
default:函數,將對象轉為字典的函數
功能:將對象序列化為json字符串并且寫入到打開的文件對象中

json.loads(s,object_hook)
參數一:字符串
參數二:將字典轉為對象的函數
功能:將字符串反序列化成對象

json.load(f,object_hook)
參數一:打開的文件對象
參數二:將字典轉為對象的函數
功能:將打開的文件對象的內容讀取并且反序列化成對象

import json

class Card:
def init(self, cardnum, password, money, lock=False):
self.cardnum = cardnum
self.password = password
self.money = money
self.lock = lock

def obj2dict(card):
return {“cardnum”:card.cardnum,“password”:card.password,“money”:card.money,“lock”:card.lock}

def dict2obj(d1):
return Card(d1[“cardnum”],d1[“password”],d1[“money”],d1[“lock”])

card = Card(“101110”, “111”, 10000)
card2 = Card(“101112”, “111”, 10000)
card3 = Card(“101113”, “111”, 10000)
cardlist = [card, card2, card3]
cardlist2 = {“card1”:card,“card2”:card2,“card3”:card3}
dict1 = {“name”:“韓梅梅”,“age”:19,“sex”:True}

print(json.dumps(dict1))

jstr = json.dumps(card,default=obj2dict)
print(type(jstr))

with open(“jsondemo.txt”,“w”,encoding=“utf-8”) as f:
# jstr = json.dumps(card, default=obj2dict)
# f.write(jstr)
json.dump(cardlist2,f,default=obj2dict)

with open(“jsondemo.txt”,“r”,encoding=“utf-8”) as f2:
# obj = json.loads(f2.read(),object_hook=dict2obj)
# print(obj)
# print(type(obj))
obj = json.load(f2)
print(obj)

csv模塊
import csv
from collections import Iterator

def getcsvlist(path,n):
csvlist = []
with open(path,“r”,encoding=“gbk”,errors=“ignore”) as f:
csv_reader = csv.reader(f)
# print(len(list(csv_reader)))
# print(isinstance(csv_reader,Iterator))
for x in range(n):
# print(next(csv_reader))
csvlist.append(next(csv_reader))
return csvlist

# for row in csv_reader: # print(row)

‘’’
讀取文件中前30條數據
‘’’

if name == ‘main’:
res = getcsvlist(“002.csv”,30)
print(res)

import csv

def getcsvlist(path,n):
csvlist = []
with open(path,“r”,encoding=“gbk”,errors=“ignore”) as f:
csv_reader = csv.reader(f)
# print(len(list(csv_reader)))
# print(isinstance(csv_reader,Iterator))
for x in range(n):
# print(next(csv_reader))
csvlist.append(next(csv_reader))
return csvlist

def writercsv(path1):
with open(path1,“w”,encoding=“gbk”) as f2:
csv_writer = csv.writer(f2)
csv_writer.writerows(getcsvlist(“002.csv”,30))
# for row in reslist:
# csv_writer.writerow(row)

if name == ‘main’:
# d1 = getcsvlist(“002.csv”,30)
writercsv(“003.csv”)

異常處理
語法:
try:
#有可能發生語句塊
except 錯誤類型1 as e:
#異常處理
except 錯誤類型2 as e2:
#異常處理2

finally:
#無論代碼是否出現異常都會執行此語句塊

執行過程:
先執行try下面的語句塊,當語句出現異常的時候,會去excpt語句中進行錯誤匹配,
若匹配上則執行該except下面的語句,若匹配不上的則報錯。
無論代碼是否出現異常,都會執行finally下面的語句。

在使用異常的捕捉的時候需要注意,它不但可以捕捉該類型的錯誤,
還可以將其子類一網打盡。

def func(a,b):
try:
res = a/b
except Exception as e:
res = e
return res

if name == ‘main’:
# print(func(1,2))
# print(func(1,0))
print(func(2,0))

# try: # print(func(1,"122")) # print("hello1") # except Exception as e: # print("e",e) # finally: # print("hello")# try: # print("hello") # except: # pass # # with open("user.txt","r",encoding="utf-8") as f: # # print(f.read()) # # except: # # print("此文件不存在") # print("執行下面的內容。。。")

錯誤調用棧:
若錯誤沒有捕獲,則會一直向上拋,直到拋給python解釋器,python解釋器
打印錯誤的堆棧信息然后退出。
因此查找錯誤的時候
第一:先看錯誤類型
第二:從下往上找[必須是你自己寫的模塊]

def func1(a,b):
return a/b

def func2(a,b):
return func1(a,b)

def main(a,b):
return func2(a,b)

if name == ‘main’:
print(main(1,2))
print(main(1,0))

記錄錯誤
import logging
import time

def func1(a,b):
return a/b

def func2(a,b):
return func1(a,b)

def main(a,b):
return func2(a,b)

if name == ‘main’:
try:
print(main(1,0))
except Exception as e:
logging.exception(e)
print(“end”)
time.sleep(30)
print(“over”)

異常并不是憑空產生的,捕獲的異常其實就是系統定義異常的類的一個實例。
在我們開發的過程中,我們不但可以捕獲異常,我們也可自己自定義異常,主動拋出異常
在自定義異常的時候我們需要選好繼承關系。
在必要的時候我們才進行自定義錯誤類型,若python 中存在已有的錯誤類型,我們
盡量使用python內置的錯誤類型。

常見的錯誤類型

  • AttributeError 試圖訪問一個對象沒有的屬性
  • IOError 輸入/輸出異常 無法打開文件
  • IndentationError 語法錯誤,代碼沒有對齊
  • keyError 訪問的key字典中不存在
  • NameError 使用一個還未賦值的對象的變量
  • TypeError 傳入對象類型與要求不合法
  • ValueError 傳入一個調用者不期望的值

class FooError(Exception):
pass

def func(n):
if n==0:
raise FooError(“0沒有階乘!!!”)
else:
res = 1
for x in range(1,n+1):
res *= x

return res

if name == ‘main’:
try:
print(func(“3”))
except TypeError as e:
print(e)
except FooError as e2:
print(e2)

總結

以上是生活随笔為你收集整理的Python语法基础14 pickle与json模块 异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。