Python基礎18-常用模塊之os、sys、json、pickle、shelve、xml、re、logging、configparse、hashlib等

os、os.path

Python的os模塊裏面定義了常用的路徑、文件操作。

os.curdir  # curdir相對路徑的當前路徑“點”
os.pardir  # pardir相對路徑的父目錄“點點”。
os.sep  # sep適應操作系統的路徑分隔符,對於windows是“\”,對於*nix是“/”。
os.linesep  # linesep適應操作系統的換行符,對於windows是“\r\n”,對於linux是“\n”。
os.pathsep  # pathsep適應於操作系統的分割路徑的符號,對於windows是分號“;”,對於linux是冒號“:”。
import os

# 獲取絕對路徑
abspath = os.path.abspath(__file__)
print(abspath)
# 獲取路徑中的路徑
print(os.path.dirname(abspath))
# 獲取路徑中文件名
print(os.path.basename(abspath))

# 獲取當前工作目錄路徑
print(os.getcwd())

# 路徑拼接,當獲取到兩個路徑片段時,進行拼接
cvdir = os.path.join(os.pardir, 'cv_work')
# 切換路徑
os.chdir(cvdir)
os.chdir(os.pardir + os.sep + 'day22')

# 創建目錄
os.makedirs('dir1/dir2')
# 刪除目錄,直到遇見不爲空的目錄
os.removedirs('dir1/dir2')

# 獲取當前目錄下所有的目錄名和文件名
ld = os.listdir(os.curdir)
for i in ld:
    if os.path.isabs(i):
        print('--', i, 'is abs path')
        pass
    if os.path.isdir(i):
        print('--', i, 'is a direcory')
        pass
    if os.path.isfile(i):
        print('--', i, 'is a file')

# 文件的元數據
print(os.stat('day22_os.py'))

# 文件的元數據
print(os.stat('day22_os.py'))

# 獲取環境變量
for k, v in os.environ.items():
    print(k, v)

sys

sys裏面記住sys.argv,用於接收命令行參數,是一個列表。列表的sys.argv的0位置是Python腳本本身,用戶輸入參數從sys.argv列表1位置開始。

sys.path在上一篇博客裏面講了,用來加入BASE_DIR。

import sys

print(sys.argv)
# C:\dev\day22>python day22_sys.py test abc 123
# ['day22_sys.py', 'test', 'abc', '123']

print(sys.path)
# ['C:\\dev\\day22', 'C:\\dev', 'C:\\Python36\\python36.zip', 'C:\\Python36\\DLLs', 'C:\\Python36\\lib', 'C:\\Python36', 'C:\\Python36\\lib\\site-packages', 'C:\\Program Files\\JetBrains\\PyCharm 2018.3.5\\helpers\\pycharm_matplotlib_backend']

json

用作數據交換的模塊。我們可以用json、pickle、xml做數據交換。json牛逼就在與可以在不同語言的數據類型之間做交換。json轉換都幹了些啥呢?json將任意數據類型轉換成了json字符串,注意是json字符串,不是普通的字符串,這樣大家都遵循json字符串的標準讀寫。

Python的json模塊通過json.dumps和json.loads進行任意數據類型和json字符串之間的轉換,這兩個接口比較靈活,推薦使用。另外兩個不帶s的接口json.dump和json.load因爲不能靈活操作,不推薦使用。

import json

# python 任意數據類型
dic = {'db': 'mysql'}
i = 8888
s = 'oracle'
nums = ['linux', 22, True]
print('python-dic', type(dic), dic)
print('python-int', type(i), i)
print('python-str', type(s), s)
print('python-list', type(nums), nums)
# python-dic <class 'dict'> {'db': 'mysql'}
# python-int <class 'int'> 8888
# python-str <class 'str'> oracle
# python-list <class 'list'> ['linux', 22, True]


# 轉換成json字符串
json_data1 = json.dumps(dic)  # {'db': 'mysql'}--->{"db": "mysql"}--->'{"db": "mysql"}'
json_data2 = json.dumps(i)  # 8888---> "8888"
json_data3 = json.dumps(s)  # 'oracle'---> "oracle"
json_data4 = json.dumps(nums)  # ['linux', 22, True]--->["linux", 22, True]--->'["linux", 22, True]'
print(type(json_data1), json_data1)
print(type(json_data2), json_data2)
print(type(json_data3), json_data3)
print(type(json_data4), json_data4)
# 注意字符串的單引號都變成了雙引號,這是json字符串的規範
# <class 'str'> {"db": "mysql"}
# <class 'str'> 8888
# <class 'str'> "oracle"
# <class 'str'> ["linux", 22, true]



# 先寫入json字符串,再讀取出來
# dumps得到json字符串
# loads得到原來的數據類型
f_write = open('json_data', 'w')
f_write.write(json.dumps(dic))
f_write.close()

f_read = open('json_data', 'r')
load_data = json.loads(f_read.read())
print(type(load_data), load_data)
f_read.close()
# <class 'dict'> {'db': 'mysql'}

pickle、shelve、xml、re、logging、configparse、hashlib未完待續……

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