1. 程式人生 > >python 常用標準庫

python 常用標準庫

 

標準庫和第三方庫第一手資料:

線上: 官方文件(https://docs.python.org/

離線:互動式直譯器(dir()、help()函式),IPython(tab鍵提示、?、??)

 

一、             日期和時間(https://docs.python.org/3/library/datetime.html

  datetime模組

  date類-例項屬性:

  year

  month

  day

  time類-例項屬性:

  hour

  minute

  second

  microsecond

  datetime類

  date()例項方法->date物件

  time()例項方法->time物件

  now()類方法->datetime物件

  strftime(str_format)例項方法->(datetime->str)

  Y:4位年份

  y:後2位年份

  m:月份

  d:日(月內第幾天)

  H:小時(24小時制)

  I:小時(12小時制)

  M:分鐘

  S:秒

  f:微秒

 

  strptime(dt_str, str_format)類方法->(str->datetime)

  timedelta類(時間差,兩個datetime物件 相減 得到 timedelta物件)

  days屬性

  seconds屬性

  microseconds屬性

  total_seconds()方法

from datetime import  datetime, timedelta

 

dt_begin = datetime.now()

for i in range(10 ** 8):

    temp = 3.2 / 2.3

dt_end = datetime.now()

dt_diff = dt_end - dt_begin

print('花費 {0.seconds} 秒, {0.microseconds} 毫秒'.format(dt_diff))

 

  time():時間戳(1970.01.01 00:00:00到現在經過的秒)

  sleep(seconds):延時

  calendar

  setfirstweekday(weekday),設定每週的起始日期碼。0(星期一)到6(星期日)。

  calendar(year,w=2,l=1,c=6):返回一個多行字串格式的year年年曆。

  3個月一行,間隔距離為c。

  每日寬度間隔為w字元。

  每行長度為21* W+18+2* C。

  l是每星期行數。

  isleap(year):判斷閏年

  weekday(year, month, day) :返回給定日期的星期日期碼

  monthrange(year, month):返回給定月份的日期範圍(元組:(第一天的星期日期碼,月天數))

        

二、             資料格式

  JSON:JavaScript物件表示法。(json在Python中叫做dict,在JS中叫做json)。

  Json字串(str_obj):所有的字串只能用雙引號(")不能用單引號(')。

  Json字串必須要有內容(len(str_obj) > 0),不能是空字串('')

  json

  load(fp):檔案物件->python內建物件

  loads(str_obj):str->python內建物件(js:JSON.parse(str_obj))

  object_pairs_hook,,控制資料如何轉換,是一個繼承自字典dict的類

  dump(obj, fp):python內建物件->檔案物件

  dumps(obj):python內建物件->str(js: JSON.stringify(obj, null, 4))

  ensure_ascii: (預設值:True,會將CJK字元轉成Unicode嘛,以符合ASCII規範)。設定為False,可保證原樣輸出。

  indent:(預設值:None,將會沒有縮排和多餘的空白輸出,全部擠到一行。)。除錯中,一般設定為4,和Python中風格一致。正式環境(比如web後端輸出),不需要縮排。

  csv

  writer(wfp) (寫入器) wfp: 可寫的檔案物件(open: newline)

  writerow(list_obj)

  writerows(2d_list_obj)

  reader(rfp) (讀取器) rfp: 可讀的檔案物件

 

  pickle

  dump(obj, wfp):(obj -> wfp),無返回值

  dumps(obj):(obj -> bytes),返回值bytes型別

  load(rfp):(rfp -> obj),返回值為obj,開啟的必須是Python的pickle生成的檔案。

  loads(bytes_obj):(bytes -> obj),返回值為obj,載入的必須是Python的pickle的位元組串,可以是dumps()方法生成的,也可以是從dump()方法生成的檔案中以二進位制方式讀取的。

說明:

obj為Python內建型別(list、dict、str等)物件

wfp為可寫的檔案物件

rfp為可讀的檔案物件

bytes為二進位制字串(位元組串)

三、             系統呼叫

  os

  getenv():獲取環境變數

  putenv():設定環境變數

  environ 從系統啟動時開始載入的環境變數(資料共享),dict相容型別,可修改。

  注意: os._Environ中有一個字典,字典中儲存了環境變數,在Python程序啟動時,就會獲取系統中的環境變數,放入其中。

  system():系統呼叫,需要傳遞一個必須的引數,字串型別。

  sep:目錄分隔符(Windows: \, Linux和Max OS X: /)

  linesep:行結束符(行分隔符)

  sys

  argv:命令列引數

  path: Python中import時的搜尋路徑,list型別,可修改

  modules:Python中已經載入了的模組,dict型別,可修改

  stdin/stdout/stderr:標準 輸入、(正常)輸出、錯誤輸出

  platform

  platform():平臺

  version():核心版本

  architecture():CPU架構

  machine():作業系統型別(I386,AMD64)。

  node():本機網路名

  processor():處理器資訊

  system():系統(Windows)

  uname():彙總資訊

  python_version():Python版本

 

補充

第三方-日期時間操作庫:python-dateutil

安裝:

pip install python-dateutil

解析時間:

import dateutil.parser as dt_parser

 

dt_str = '2018-08-09 12:23:34'

dt = dt_parser.parse(dt_str)

第三方-資料操作庫:pandas

安裝:

pip install pandas

解析時間:

import pandas as pd

 

csv_path = r'C:\User\XYZ\abc.csv'

df = pd.read_csv(csv_path)

標準庫-讀取json到有序字典:

import json

from collections import OrderedDict

 

dict_obj = json.loads(str_data, object_pairs_hook=OrderedDict)

Json擴充套件應用(豆瓣標籤爬蟲):

# -*- coding: utf-8 -*-

import json

 

import requests

 

resp = requests.get('https://movie.douban.com/j/search_tags?type=movie&source=')

if resp.ok:

    try:

        data = json.loads(resp.text)

    except Exception as e:

        print(e)

    else:

        print(data)

else:

    print('請求失敗')

bytes與str轉換:

bytes_obj. decode(encoding='utf-8', errors='strict')

         bytes.decode()引數:

                  encoding:指明位元組串是以哪種編碼儲存的。預設值為'utf-8'。

                  errors:如果出錯了,如何處理。可能的值為'strict'(嚴格處理,引發異常)、'ignore'(忽略,程式繼續)、'replace'(替換,程式繼續)。預設值為'strict'。

   str.encode(=, ='strict')

                   encoding:指定了轉成哪種編碼。預設值為'utf-8'。

                   errors:如果出錯了,如何處理。預設值為'strict'。

         chardet:第三方庫,專用於編碼判斷,使用步驟如下:

  1. 以二進位制方式讀取檔案,得到位元組串
  2. 呼叫chardet.detect()方法,引數為上一步得到的位元組串。
  3. 識別結果為字典型別,有一個名為'encoding',就是識別到的編碼。但是,有可能判斷失敗,所以需要判斷結果是否有效。

         chardet示例程式碼

# -*- coding: utf-8 -*-

# 模組倒入

try:

    import chardet

except ImportError:

    # 如果匯入第三方庫出錯,一般是未安裝

    # 呼叫pip安裝

    import os

    os.system('pip install chardet')

    # 安裝完成後重新匯入

    import chardet

 

# 要判斷編碼的內容

bys = b'hehe'

# 判斷編碼

det = chardet.detect(bys)

# 獲取編碼

encoding = 'None'

# 可能檢測失敗,需要判斷

if isinstance(det, dict) and 'encoding' in det:

    encoding = det['encoding']

# 如果獲取到了編碼

if bool(encoding):

    # TODO:得到編碼後做的事,以下是示例

    # 就算正確得到了編碼,也要防止存在不可解碼的字元

    # 所以需要設定errors引數值為'ignore'或'replace',一般用前者

    str_obj = bys.decode(encoding, errors='ignore')

    print(str_obj)

    # TODO: 對字串操作

    pass

else:

    print('編碼檢測失敗,請手動處理')