python進階 ---數據結構轉化的幾種方式

需求

在程序運行的過程中,未免會進行數據的交換,在此先簡單的理解爲數據的導入與導出。由於不同進程使用的數據結構很可能不同,因此進程間進行數據交互時就避免不了不同格式數據的互相轉換。其中最常用的就是json格式與csv格式的數據,本文就簡單介紹下這兩種數據之間的互相轉換以及它們與字典之間的互相轉換。

字典數據與json格式數據的互相轉化

import json

"""
1.將字典中的數據導入到json文件
2.將json文件中的數據導入到字典
"""

d1 = {
    'grape':'summer_fruit',
    'lemon': 'summer_fruit',
    'apple':'allyear_fruit',
    'orange':'allyear_fruit'
    }

with open('./fruit.json', 'w+', encoding='utf-8') as f:
    json.dump(d1, f, indent=1)
    # print(f)

with open('./fruit.json', 'r+') as e:
    d2 = dict(json.load(e))
    print(d2)

字典數據與csv格式數據的互相轉化

import csv
"""
1.將字典中的數據導入到csv文件
2.將csv中的數據導入到字典
"""

d1 = {
    'grape':'summer_fruit',
    'lemon': 'summer_fruit',
    'apple':'allyear_fruit',
    'orange':'allyear_fruit'
    }

with open('./fruit.csv', 'w+', encoding='utf-8', newline='') as f:
    writer = csv.writer(f)
    writer.writerows(d1.items())

with open('./fruit.csv', 'r+', encoding='utf-8', newline='') as e:
    reader = csv.reader(e)
    d2 = dict(reader)
    print(d2)

json與csv格式的互相轉化

import json
import csv

"""
1.json轉化成csv
2.csv轉換成json
"""

json_file = './fruit.json'
dest_file = './test.csv'

with open(json_file, 'r+', encoding='utf-8') as f:
    x = dict(json.load(f))
    # print(x)

with open(dest_file, 'w+', encoding='utf-8', newline='') as e:
    writer = csv.writer(e)
    writer.writerows(x.items()) #將數據寫入csv文件

with open(dest_file, 'r+') as g:
    reader = csv.reader(g)
    for x in reader:
        # print(x)
        print(json.dumps(x)) #csv轉換成json數據

數據庫數據的導入與提取

from configparser import ConfigParser
import pymysql
import simplejson
import csv
"""
1.將表格中的數據導入數據庫
2.查詢數據庫並將數據導入到表格
"""

data_file = './fruit.csv'
conf_file = './conn.json'

conf = simplejson.load(open(conf_file))
conn = None
cu = None
try:
    conn = pymysql.connect(**conf) #解構配置文件,生成連接器對象
    cu = conn.cursor()
    with open(data_file, 'r+', encoding='utf-8', newline='') as f:
        writer = csv.reader(f)
        # print(writer)
        for line in writer: #遍歷表格然後生成sql
            sql = "insert into fruit(`name`, `class`) values('{}', '{}')".format(line[0], line[1])
            # print(sql)
            cu.execute(sql) #將sql執行,導入數據
            conn.commit()
except Exception:
    conn.rollback()
finally:
    with open('./xjw.csv', 'w+', encoding='utf-8', newline='') as e:
        sql = "select * from fruit;"
        cu.execute(sql)
        x = cu.fetchall()
        print(type(x), x)
        writer = csv.writer(e)
        writer.writerows(x)
    if cu:
        cu.close()
    if conn:
        conn.close()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章