Python面試一百題——數據存儲

目錄

  1. 讀取XML節點和屬性值
  2. XML文檔與字典之間的互相轉換
  3. 將JSON字符串轉換爲類的實例
  4. 將類的實例轉換爲JSON字符串
  5. 操作SQLite數據庫
  6. 操作MySQL數據庫
  7. ORM框架
  8. 將XML文檔保存在MongoDB數據庫

01.讀取XML節點和屬性值

在這裏插入圖片描述
在這裏插入圖片描述

form xml.etree.ElementTree import parse

doc = parse('file/products.xml')
print(type(doc))
for item in doc.iterfimd('products/product'):   # 找product節點
    id = item.findtext('id')     # 找id節點裏的文本
    name = item.findtext('name')
    price = item.findtext('price')
    uuid = item.get('uuid')     # 獲得uuid屬性值
    print('uuid','=', uuid)
    print('id', '=', id)
    print('name', '=', name)
    print('price', '=', price)
    print('-' * 9)

在這裏插入圖片描述
總結
在這裏插入圖片描述

02.XML文檔與字典之間的互相轉換

在這裏插入圖片描述

# 字典轉xml
import dicttoxml
import os
from xml.dom.minidom import parseString

d = [20, 'name', {'name': 'Bill', 'age': 30, 'salary': 2000},
                 {'name': 'Mike', 'age': 40, 'salary': 3000},
                 {'name': 'John', 'age': 20, 'salary': 4000}]

bxml = dicttoxml.dicttoxml(d, custom_root='person')
xml = bxml.decode('utf-8')
dom = parseString(xml)
prettyxml = dom.toprettyxml(indent='  ')
f = open('persons.xml', 'w', encoding='utf-8')
f.write(prettyxml)
f.close()

# xml轉字典
import xmltodict
import pprint

f = open('persons.xml', 'r', encoding='utf-8')
xml = f.read()
d = xmltodict.parse(xml)
pp = pprint.PrettyPrinter(indent=2)
pp.pprint(d)
print(d)

在這裏插入圖片描述
總結
在這裏插入圖片描述

03.將JSON字符串轉換爲類的實例

在這裏插入圖片描述

import json

class Product:
    def __init__(self, d):
        self.__dict__ = d

f = open('products.json', 'r')
jsonStr = f.read()
product = json.loads(jsonStr, object_hook=Product)   # 先用loads把type變爲 'dict',再引入Product類
print(product.name)
print(product.price)

# 方法二:創建轉換函數
def json2Product(d):
    return Product(d)

product1 = json.loads(jsonStr, object_hook=json2Product)    # json2Product不能加(),否則爲調用
print(product1.name)
print(product1.price)

總結
在這裏插入圖片描述

04.將類的實例轉換爲JSON字符串

在這裏插入圖片描述

import json

class Product:
    def __init__(self, name, price, count):
        self.name = name
        self.price = price
        self.count = count

product = Product('特斯拉', 100000, 20)
def product2Dict(obj):
    return {
        'name':obj.name,
        'price':obj.price,
        'count':obj.count
    }
jsonStr = json.dumps(product, default=product2Dict, ensure_ascii=False)
print(jsonStr)
{"name": "特斯拉", "price": 100000, "count": 20}
jsonStr = json.dumps(product, default=product2Dict, ensure_ascii=True)	# 若改爲True,則中文不會按原來輸出
{"name": "\u7279\u65af\u62c9", "price": 100000, "count": 20}

# 問題二
f = open('products.json', 'r', encoding='utf-8')
jsonStr = f.read()


class Product:
    def __init__(self, d):
        self.__dict__ = d

products = json.loads(jsonStr, object_hook=Product)
for product in products:
    print(product.name)

jsonStr = json.dumps(products, default=product2Dict, ensure_ascii=False))
print(jsonStr)

總結
在這裏插入圖片描述

05.操作SQLite數據庫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章