1. 程式人生 > 其它 >Day 21:Python 多執行緒和協程

Day 21:Python 多執行緒和協程

結構化資料型別

關係型資料庫結構化儲存
json、html等半結構化資料
圖片音訊資料等非結構化資料

Python處理csv檔案

csv是一個被行分隔符、列分隔符劃分成行和列的文字檔案
行分隔符為\r\n,最後一行沒有換行符
列分隔符通常為逗號或製表符

import csv

line1 = [1,"zhangsan",25]
line2 = [2,"zhangsan",23]

with open('./test.csv', 'w+', newline='') as csv_file:
    write = csv.writer(csv_file)  # 建立csv物件
    write.writerow(line1) # 寫入操作
    write.writerow(line2)

Python處理ini檔案

ini檔案,作為配置檔案

'''
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

!includedir /etc/my.cnf.d
'''

中括號裡面的部分稱為section
每個section內,都是keyvalue形成的鍵值對,key稱為option選項
對於ini檔案解析,python提供了專門的模組configparser

from configparser import ConfigParser
cfg = ConfigParser()
cfg.read('./my.cnf')
print(cfg.sections())
# 遍歷獲取sections
for section in cfg.sections():
    # 通過section獲取options
    for k in cfg.options(section):
        print(section, k)

# 遍歷獲取sections
for section in cfg.sections():
    # 通過section獲取options和values
    for k, v in cfg.items(section):
        print(k, v)

# 獲取指定options的str值
a = cfg.get('test', 'port')
print(a, type(a))
# 獲取指定options的int型別值
a = cfg.getint('test', 'port')
print(a, type(a))
# 判斷是否存在指定options
print(cfg.has_option('test', 'server_name'))

# 檢查是否存在test的section
if not cfg.has_section('test'):
    # 新增test section
    cfg.add_section('test')
# 在test中新增名稱為port的options
cfg.set('test', 'port', '80')
cfg.set('test', 'port2', '8080')

# 刪除指定options
cfg.remove_option('test', 'port2')
# 持久化至檔案,所有針對ini的寫入操作,都需要進行持久化操作
with open('./my.cnf', 'w') as f:
    cfg.write(f) 

序列化和反序列化

serialization 序列化

將記憶體中物件儲存下來,變成一個個位元組

desserialization 反序列化

將檔案的一個個位元組回覆稱記憶體中的物件

序列化儲存到檔案就是持久化,可以將資料序列化後持久化、網路傳輸

python處理Json檔案

  • json的資料型別

    雙引號引起來的字串,數值,true和false,null,物件,陣列。

  • Python中json模組

    Python型別 json型別
    True true
    False false
    None null
    str string
    int integer
    float float
    list array
    dict object
  • 常用方法:

    指令 說明
    dumps 序列化,json編碼(字典轉json)
    dump 序列化,json編碼並存入檔案
    loads 反序列化,json解碼(json轉字典)
    load 反序列化,json解碼,從檔案中讀取資料
    import json
    d = {'a': 123, 'b': [1, 2, 3, {'c': 456}], 'd': True, 'e': None}
    print(d)
    print(json.dumps(d))
    {'a': 123, 'b': [1, 2, 3, {'c': 456}], 'd': True, 'e': None}
    {"a": 123, "b": [1, 2, 3, {"c": 456}], "d": true, "e": null}
    

    一般json編碼的資料很少落地,資料都是通過網路傳輸。

  • messagePack:一個基於二進位制高效的物件序列化類庫,可以像json一樣,在許多語言中交換結構物件,同時支援壓縮

# 安裝
pip install msgpack-python
# 使用方法
packb 序列化物件,提供了dumps來相容
unpackb 反序列化物件,提供了loads來相容

shutil模組

python提供了一個方便的高階檔案操作的庫

import shutil

# 檔案物件的複製,fsrc直接呼叫read方法,fdst直接呼叫write方法,因此需要特別注意原檔案指標和目標檔案是夠可寫。length制定了buffer大小
copyfileobj(fsrc, fdst[, length])
In [4]: shutil.copyfileobj('sftp-password.txt', 'sftp-password1.txt') 

# 複製檔案內容,不包含元資料,src和dst為檔案的路徑字串
copyfile(src, dst,* ,follow_symlinks=True)
In [4]: shutil.copyfile('sftp-password.txt', 'sftp-password1.txt') 

# 僅僅複製許可權,要求src和dst必須存在
copymode(src, dst,* ,follow_symlinks=True)
In [4]: shutil.copymode('sftp-password.txt', 'sftp-password1.txt') 

# 複製檔案元資料資訊,包含許可權,但不包含檔案屬主
copystat(src, dst,* ,follow_symlinks=True)
In [4]: shutil.copystat('sftp-password.txt', 'sftp-password1.txt') 

# 複製檔案內容、許可權、部分元資料資訊,不包括建立時間和修改時間
copy(src, dst,* ,follow_symlinks=True)
In [6]: shutil.copy('sftp-password.txt', 'test01.txt')  

# 複製目錄,src,dst必須為目錄,src必須存在,dst必須不存在
copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False)

# 刪除檔案,遞迴刪除
rmtree(path, ignore_errors=False, onerror=None)

# 移動檔案
move(src, dst, copy_function=copy2)