1. 程式人生 > 其它 >python之os、sys、json、subprocess模組

python之os、sys、json、subprocess模組

python之os、sys、json、subprocess模組

昨日內容回顧

re模組方法補充

findall系列方法分組優先機制
括號會優先顯示括號內內容,手動取消優先顯示需要(?:)

正則表示式起別名(只要用於search與match中)
(?P<別名>本名)

collections模組

1.具名元組
	from collections import namedtuple
	建立一個元組物件模板。
	point = tuple('數字組',['數字1','數字2'])
	建立諸多元租資料
	p1 = point(1,2)
  p2 = point(3,4)
  print(p1,p2)
  
2.雙端佇列
	佇列:先進先出   預設是隻有一端只能進另外一端只能出
  雙端佇列:兩端都可以進出
 	import queue
   q = queue.Queue(最大可儲存元素)
   q.get()  # 獲取元素,知道佇列無元素
   q.pop()  # 右邊彈出元素
   q.popleft()  # 左邊彈出元素
  
3.有序字典
	from collections import OrderedDict
  d2 = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
  print(d2)
  d2['x'] = 1
  d2['y'] = 2
  d2['z'] = 3
  print(d2)
  print(d2.keys())
  
  字典生成式
	from collections import defaultdict
	values = [1, 2, 3, 4, 5 , 7, 8, 9]
	my_dict = defaultdict(list)  # 字典所有的值預設都是列表  {'':[],'':[]}
  for value in  values:
    if value<6:  # 設定條件
        my_dict['k1'].append(value)
    else:
        my_dict['k2'].append(value)

4.計數器
  res = 'abcabcabcaabbcc'
  from collections import Counter
  r = Counter(res)
  print(r)  # 返回一個字典,每種值與值的數量形成一個鍵對值
  print(r.get('b'))  # 取出v值,獲取值出現的數量

time模組

三種表示時間的格式
	1.時間戳
	2.結構化時間
	3.格式化時間
  
	time.time()  # 獲取當前時間戳
  time.localtime()  # 結構化當前時間
  time.strftime()  # 格式化當前時間,格式由引數 format 決定
  	%Y%m%d %H%M%S %X
  time.sleep()  # 暫停程式執行
  
時間格式轉換
	時間戳			結構化時間			格式化時間
  	time.strptime('時間','時間格式')
 不可從時間戳直接轉換為格式化時間

datetime模組

常用獲取時間
datetime.datetime.today()   '''年月日時分秒'''
datetime.date.today()				'''年月日'''
  
時間差值
datetime.timedelta()

日期物件 = 日期物件 +/- timedelta物件
timedelta物件 = 日期物件 +/- 日期物件

random模組

# 隨機數模組
random.random()  0到1之間的小數
random.uniform()  指定區間的小數
random.randint()  指定區間的整數(擲骰子)
random.choice()  隨機抽取一個(抽獎)
random.sample()  隨機抽樣(可以自定義個數)
random.shuffle()  隨機打亂資料集合

今日內容概要

os模組

1.建立目錄或資料夾
os.mkdir(r'資料夾')  # 在當前執行檔案所在的路徑下建立一個資料夾
os.makedirs(r'目錄')  # makedirs可以建立單級目錄
os.makedirs(r'1/2/3')  # makedirs支援建立多級目錄

2.刪除目錄(資料夾)
os.rmdir(r'aaa')  # 可以刪除單級目錄
os.rmdir(r'bbb')  # 只能刪空的單級目錄
os.removedirs(r'ccc')  # 可以刪除單級目錄
os.removedirs(r'目標絕對地址')  # 刪除目錄之後如果外層的目錄也是空的則繼續刪除

3.檢視某個路徑下所有的檔名稱(檔案、資料夾)
print(os.listdir())  # 獲取當前根目錄下所有檔案
print(os.listdir(r'/Users'))  # 獲取目標目錄下的所有檔案

4.刪除、重新命名檔案
os.remove(phtn)  # path -- 要移除的檔案路徑
os.rename(src, dst)  # src -- 要修改的目錄名 dst -- 修改後的目錄名

5.獲取當前路徑、切換路徑
os.getcwd()  # 返回當前程序的工作目錄
os.chdir(path)  # 改變當前程序的工作目錄  path -- 要切換到的新路徑

6.軟體開發目錄規範,啟動指令碼相容性操作
os.path.dirname(__file__)  # 動態獲取當前執行檔案所在的絕對路徑
os.path.dirname(os.path.dirname(__file__))  # 每巢狀一層就是往上切換一層
print(os.path.abspath(__file__))  # 動態獲取當前執行檔案自身的路徑

7.判斷檔案是否存在
os.path.isabs(path)  # 判斷是否為絕對路徑
os.path.isfile(path)  # 判斷路徑是否為檔案
os.path.isdir(path)  # 判斷路徑是否為目錄
os.path.islink(path)  # 判斷路徑是否為連結

8.拼接路徑
res = os.path.join(base_dir, exe_dir)  # 能夠自動識別當前作業系統的分隔符

9.獲取檔案大小(位元組  bytes)
print(os.path.getsize(path)) 

sys模組

該模組主要是跟python直譯器打交道
import sys
print(sys.path)  # 列舉當前執行檔案所在的sys.path
print(sys.version)  # 獲取直譯器版本資訊
print(sys.platform)  # 獲取平臺資訊
print(sys.argv)  # 自定義命令列操作,只能在終端裡使用,本身是個列表。

try:
    username = sys.argv[1]
    password = sys.argv[2]
except Exception:
    print('請輸入使用者名稱和密碼')
else:
    if username == 'jason' and password == '123':
        print('可以正常執行該檔案')
    else:
        print('使用者名稱或密碼錯誤 沒有該檔案的執行許可權')

json模組

JavaScript Object Notation,JavaScript 物件表示法
json是一個序列化模組,是一種儲存和交換文字資訊的語法,
主要用於跨語言傳輸資料,類似中轉站。

資料基於網路傳輸肯定是二進位制格式,而python中只有字串資料型別可以轉換為二進位制資料。
利用編碼encode,所以,json格式資料,本質應該屬於字串型別。

雙引號是json格式資料獨有的標誌符號,在控制檯中會呈現雙引號的都是json。
具體操作
例入,現在我要將一段python資料轉換為json格式傳送出去,然後再經由json模組將這段json格式的資料,從python中解釋出來。
	
 1.轉換為json格式
  import json
  a = {'name': 'eason', 'code': 1874}
  res = json.dumps(a)
  print(res)
  {"name": "eason", "code": 1874}
2.將json格式資料轉換為二進位制資料
  encode_str = res.encode('utf8')
  print(encode_str)
  b'{"name": "eason", "code": 1874}'
3.將二進位制資料重新接收後,再轉換為字串,json格式
	json_str = encode_str.decode('utf8')
	print(json_str)
  {"name": "eason", "code": 1874}
4.將json格式資料返回原本資料格式
	res1 = json.loads(json_str)
	print(res1)
	{'name': 'eason', 'code': 1874}
  
  # 強調:不是所有的資料型別都支援序列化
""" json模組,pychrm內部程式碼自帶表格
    +-------------------+---------------+
    | Python            | JSON          |
    +===================+===============+
    | dict              | object        |
    +-------------------+---------------+
    | list, tuple       | array         |
    +-------------------+---------------+
    | str               | string        |
    +-------------------+---------------+
    | int, float        | number        |
    +-------------------+---------------+
    | True              | true          |
    +-------------------+---------------+
    | False             | false         |
    +-------------------+---------------+
    | None              | null          |
    +-------------------+---------------+
"""

subprocess模組

import subprocess
subprocess 模組首先使用的是它的 run 方法,更高階的用法可以直接使用 Popen 介面。
  • args:表示要執行的命令。必須是一個字串,字串引數列表。

  • stdin、stdout 和 stderr:子程序的標準輸入、輸出和錯誤。其值可以是 subprocess.PIPE、subprocess.DEVNULL、一個已經存在的檔案描述符、已經開啟的檔案物件或者 None。subprocess.PIPE 表示為子程序建立新的管道。subprocess.DEVNULL 表示使用 os.devnull。預設使用的是 None,表示什麼都不做。另外,stderr 可以合併到 stdout 裡一起輸出。

  • timeout:設定命令超時時間。如果命令執行時間超時,子程序將被殺死,並彈出 TimeoutExpired 異常。

  • check:如果該引數設定為 True,並且程序退出狀態碼不是 0,則彈 出 CalledProcessError 異常。

  • encoding: 如果指定了該引數,則 stdin、stdout 和 stderr 可以接收字串資料,並以該編碼方式編碼。否則只接收 bytes 型別的資料。

  • shell:如果該引數為 True,將通過作業系統的 shell 執行指定的命令。

今天小結

調整狀態,努力學習!