天天看點

移遠QuecPython(基于EC600s)開發物聯網應用(五) micropython标準庫一. uos - 基本系統服務二. ubinascii 進制與轉換子產品三. random 随機子產品四. math 數學運算五. ujson - JSON編碼和解碼六. utime - 與時間相關功能七. sys 子產品八. uhashlib - 雜湊演算法九. _thread - 多線程

一. uos - 基本系統服務

導入子產品

import uos
           

1. 擷取目前路徑

uos.getcwd()
           

2. 列出目錄檔案

uos.listdir( [dir] )
           

沒有參數列出目前目錄檔案,否則列出給定目錄的檔案。dir為可選參數,表示目錄名,預設為 ‘/’ 目錄。

3. 改變目前目錄

uos.chdir(path)
           

4. 建立一個新的目錄/檔案

uos.mkdir(path)
           

建立一個新的目錄。path表示準備建立的目錄名。

移遠QuecPython(基于EC600s)開發物聯網應用(五) micropython标準庫一. uos - 基本系統服務二. ubinascii 進制與轉換子產品三. random 随機子產品四. math 數學運算五. ujson - JSON編碼和解碼六. utime - 與時間相關功能七. sys 子產品八. uhashlib - 雜湊演算法九. _thread - 多線程

5. 重命名目錄/檔案

uos.rename(old_path, new_path)
           

重命名檔案。old_path表示舊檔案或目錄名,new_path表示新檔案或目錄名。

移遠QuecPython(基于EC600s)開發物聯網應用(五) micropython标準庫一. uos - 基本系統服務二. ubinascii 進制與轉換子產品三. random 随機子產品四. math 數學運算五. ujson - JSON編碼和解碼六. utime - 與時間相關功能七. sys 子產品八. uhashlib - 雜湊演算法九. _thread - 多線程

6. 删除指定目錄

uos.rmdir(path)
           

7. 删除檔案

uos.remove(path)
           

8. 檔案/目錄 三元組(或四元組)疊代器

uos.ilistdir( [dir] )
           

dir為可選參數,表示目錄名,沒有參數時,預設列出目前目錄,有參數時,則列出dir參數指定的目錄。

該函數傳回一個疊代器,該疊代器會生成所列出條目對應的三元組(或者四元組,對EC600S來說是四元組)。

三元組(或四元組)結構(name, type, inode[, size]):

  • name 是條目的名稱,字元串類型,如果dir是位元組對象,則名稱為位元組;
  • type 是條目的類型,整型數,0x4000表示目錄,0x8000表示正常檔案;
  • 是一個與檔案的索引節點相對應的整數,對于沒有這種概念的檔案系統來說,可能為0;
  • 一些平台可能會傳回一個4元組,其中包含條目的size。對于檔案條目,size表示檔案大小的整數,如果未知,則為-1。對于目錄項,其含義目前尚未定義。

例如:

import uos

print(uos.getcwd())

for item in uos.ilistdir():
  print(item)
           
移遠QuecPython(基于EC600s)開發物聯網應用(五) micropython标準庫一. uos - 基本系統服務二. ubinascii 進制與轉換子產品三. random 随機子產品四. math 數學運算五. ujson - JSON編碼和解碼六. utime - 與時間相關功能七. sys 子產品八. uhashlib - 雜湊演算法九. _thread - 多線程

9. 擷取檔案或目錄的狀态

uos.stat(path)
           

擷取檔案或目錄的狀态。path表示檔案或目錄名。傳回值是一個元組,傳回值形式為:

(mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime)

mode – inode保護模式

ino – inode節點号

dev – inode駐留的裝置

nlink – inode的連結數

uid – 所有者的使用者ID

gid – 所有者的組ID

size – 檔案大小,機關位元組

atime – 上次通路的時間

mtime – 最後一次修改的時間

ctime – 作業系統報告的“ctime”,在某些系統上是最新的中繼資料更改的時間,在其它系統上是建立時間,詳細資訊參見平台文檔

這個我在EC600S上列印的資料不對, 沒深究

10. 擷取檔案系統狀态資訊

uos.statvfs(path)
           

path表示檔案或目錄名。傳回一個包含檔案系統資訊的元組

(f_bsize, f_frsize, f_blocks, f_bfree, f_bavail, f_files, f_ffree, f_favail, f_flag, f_namemax)

f_bsize – 檔案系統塊大小,機關位元組

f_frsize – 分棧大小,機關位元組

f_blocks – 檔案系統資料塊總數

f_bfree – 可用塊數

f_bavai – 非超級使用者可擷取的塊數

f_files – 檔案結點總數

f_ffree – 可用檔案結點數

f_favail – 超級使用者的可用檔案結點數

f_flag – 挂載标記

f_namemax – 最大檔案長度,機關位元組

11. 擷取關于底層資訊或其作業系統的資訊

uos.uname()
           

擷取關于底層資訊或其作業系統的資訊。傳回一個元組,形式為:

(sysname, nodename, release, version, machine)

  • sysname – 底層系統的名稱,string類型
  • nodename – 網絡名稱(可以與 sysname 相同) ,string類型
  • release – 底層系統的版本,string類型
  • version – MicroPython版本和建構日期,string類型
  • machine – 底層硬體(如主機闆、CPU)的辨別符,string類型
移遠QuecPython(基于EC600s)開發物聯網應用(五) micropython标準庫一. uos - 基本系統服務二. ubinascii 進制與轉換子產品三. random 随機子產品四. math 數學運算五. ujson - JSON編碼和解碼六. utime - 與時間相關功能七. sys 子產品八. uhashlib - 雜湊演算法九. _thread - 多線程

12. 随機bytes

傳回具有n個随機位元組的bytes對象,隻要有可能,它就會由硬體随機數生成器生成。

uos.urandom(n)
           

我不知道這是幹啥用的 😂😂😂

二. ubinascii 進制與轉換子產品

導入子產品

import ubinascii
           

1. 編碼base64資料

ubinascii.b2a_base64(data)
           

以base64格式編碼二進制資料,傳回編碼資料。後面跟換行符,作為 bytes 對象。

2. 解碼base64編碼的資料

ubinascii.a2b_base64(data)
           

解碼base64編碼的資料,會自動忽略輸入中的無效字元,傳回 bytes 對象。

3. 将二進制資料轉換為十六進制字元串表示

ubinascii.hexlify(data, [sep])
           

指定了第二個參數sep,它将用于分隔兩個十六進制數

4. 将十六進制形式的字元串轉換成二進制形式的字元串表示

ubinascii.unhexlify(data)
           

三. random 随機子產品

導入子產品

import urandom
           

1. 随機0 到 1 之間的浮點數

urandom.random()
           

2. 随機生成一個 start 到 end 之間的整數

urandom.randint(start, end)
           

3. 随機生成 start 到 end 間并且遞增為 step 的正整數

urandom.randrange(start, end, step)
#例如: 取1~100間的偶數
urandom.randrange(0, 100, 2)
           

4. 随機生成 start 到 end 範圍内的浮點數

urandom.uniform(start, end)
           

5. 随機取數

urandom.choice(obj)
           

随機取 obj 中的元素, obj是一個容器

6. 随機産生一個在n bits範圍内的數。

urandom.getrandbits(n)
#例如:
urandom.getrandbits(8)  #取8位二進制位範圍内的數 (傳回結構預設十進制)
           

7. 随機數種子

urandom子產品使用Mersenne Twister算法來計算生成随機數。這是一個确定性算法,可以通過random.seed()函數修改初始化種子.

簡單來說,用了随機數種子後, 同一段代碼每次随機都是确定的随機值

import urandom
urandom.seed(20)
for i in range(3):
    print(urandom.random())
           
移遠QuecPython(基于EC600s)開發物聯網應用(五) micropython标準庫一. uos - 基本系統服務二. ubinascii 進制與轉換子產品三. random 随機子產品四. math 數學運算五. ujson - JSON編碼和解碼六. utime - 與時間相關功能七. sys 子產品八. uhashlib - 雜湊演算法九. _thread - 多線程

四. math 數學運算

導入子產品

import math
           
常亮 說明
math.e 數學常量 e
math.pi 圓周率
方法 說明
math.ceil(x) 向上取整
math.floor(x) 向下取整
math.trunc(x) 傳回x的整數部分
math.fmod(x, y) 傳回x/y的餘數,傳回值為浮點數
math.modf(x) 傳回由x的小數部分和整數部分組成的元組。
math.fabs(x) 絕對值
math.isfinite(x) 判斷 x 是否為有限數,是則傳回True,否則傳回False。
math.isinf(x) 判斷x是否是正無窮大或負無窮大,則傳回True,否則傳回False。
math.isnan(x) x是不是數字,傳回True,否則傳回False。
math.sqrt(x) 傳回數字x的平方根,傳回值為浮點數
math.pow(x, y) 傳回x的y次方,傳回值是浮點數。
math.degrees(x) 将弧度轉換為角度,傳回值為浮點數
math.radians(x) 将角度轉換為弧度,傳回值為浮點數
math.sin(x) 傳回x弧度的正弦值,數值在 -1 到 1 之間
math.cos(x) 傳回x弧度的餘弦值,數值在 -1 到 1 之間
math.tan(x) 傳回 x 弧度的正切值,數值在 -1 到 1 之間,為浮點數
math.asin(x) 傳回x的反正弦弧度值,傳回值為浮點數。x是-1~1之間的數,包括-1和1
math.acos(x) 傳回x的反餘弦弧度值,傳回值為浮點數。x是-1~1之間的數,包括-1和1
math.atan(x) 傳回x的反正切弧度值,傳回值為浮點數
math.atan2(x, y) 傳回給定的 X 及 Y 坐标值的反正切值,傳回值為浮點數
math.log(x) 傳回x的自然對數,x > 0,小于0會報錯
math.copysign(x, y) 把y的正負号加到x前面,可以使用0,傳回值為浮點數。
math.ldexp(x, exp) math.ldexp()方法傳回給定數字x和i的x * (2 ** i),這是math.frexp()的反函數

五. ujson - JSON編碼和解碼

ujson 子產品實作在Python資料對象和JSON資料格式之間進行轉換的功能。

import ujson
           

1. ujson.dump(obj, stream)

将 obj 資料對象轉化成 JSON字元串,将其寫入到給定的 stream 中

2. ujson.dumps(dict)

将 dict 類型的資料轉換成JSON字元串

3. ujson.load(stream)

解析給定的資料 stream,将其解釋為JSON字元串并反序列化成Python對象。

4. ujson.loads(str)

解析JSON字元串并傳回obj對象

六. utime - 與時間相關功能

utime 子產品用于擷取目前時間和日期、測量時間間隔和延遲。

import utime
           

1. utime.localtime([secs]) 時間戳轉時間元組

該函數用來将一個以秒表示的時間轉換為一個元組,元組包含了了年、月、日、時、分、秒、星期、一年中第幾天;如果沒有給定參數sec,則使用RTC時間。傳回值形式如下:

(year, month, mday, hour, minute, second, weekday, yearday)

  • year :年份,int型
  • month :月份,1~12,int型
  • mday :日,當月多少号,1~31,int型
  • hour :小時,0~23,int型
  • minute :分鐘,0~59,int型
  • second :秒,0~59,int型
  • weekday :星期,周一到周日是0~6,int型
  • yearday :一年中的第多少天,int型

2. utime.mktime(datetime) 時間元組轉時間戳

該函數作用與locatime()相反,它将一個存放在元組中的時間轉換為以秒計的時間戳

3. utime.sleep(seconds) /utime.sleep_us(us) 休眠給定的時間

注意:sleep()函數的調用會導緻程式休眠阻塞。

4. utime.time()

傳回自紀元以來的秒數(以整數形式)。如果未設定RTC,則此函數傳回自特定于端口的參考時間點以來的秒數(對于不具有電池後備RTC的嵌入式闆,通常是由于加電或複位)。如果要開發可移植的MicroPython應用程式,則不應依賴此功能提供高于秒的精度。如果需要更高的精度,請使用 ticks_ms()和ticks_us()函數,如果需要月曆時間,則 localtime()不帶參數會更好。

4. utime.ticks_ms() / utime.ticks_us()

傳回不斷遞增的毫秒/微秒計數器,在某些值後會重新計數(未指定)。計數值本身無特定意義,隻适合用在 ticks_diff()函數中。

5 . utime.ticks_cpu()

和 ticks_ms/ticks_us 類似,具有更高精度 (使用 CPU 時鐘)。

6. utime.ticks_diff(ticks1, ticks2)

計算兩次調用 ticks_ms(), ticks_us(),或 ticks_cpu()之間的時間。因為這些函數的計數值可能會回繞,是以不能直接相減,需要使用 ticks_diff() 函數。“舊” 時間需要在 “新” 時間之前,否則結果無法确定。這個函數不要用在計算很長的時間 (因為 ticks_*() 函數會回繞,通常周期不是很長)。通常用法是在帶逾時的輪詢事件中調用。

七. sys 子產品

sys 子產品中提供了與QuecPython運作環境有關的函數和變量

import sys
           
參數 說明
sys.implementation 目前microPython版本資訊
sys.byteorder 位元組順序 (‘little’ - 小端, ‘big’ - 大端)
sys.maxsize 本機整數類型可以在目前平台上保留的最大值,如果它小于平台最大值,則為MicroPython整數類型表示的最大值
sys.argv 目前程式啟動的可變參數清單。
sys.modules 已載入子產品的字典
sys.platform MicroPython運作的平台
sys.version MicroPython 語言版本,字元串格式。
sys.version_info MicroPython 語言版本,整數元組格式。
sys.stdin 标準輸入(預設是USB虛拟序列槽,可選其他序列槽)
sys.stdout 标準輸出(預設是USB虛拟序列槽,可選其他序列槽)
方法 說明
sys.exit(retval=0) 使用給定的參數退出目前程式。與此同時,該函數會引發SystemExit退出。如果給定了參數,則将其值作為參數指派給SystemExit
sys.print_exception(exc, file=sys.stdout) 列印異常到檔案對象,預設是 sys.stdout,即輸出異常資訊的标準輸出。

八. uhashlib - 雜湊演算法

實作二進制資料雜湊演算法,目前支援sha256,sha1,MD5。

import uhashlib
           

1. 建立哈希對象

hash_obj = uhashlib.sha256(bytes)
hash_obj = uhashlib.sha1(bytes)
hash_obj = uhashlib.md5(bytes)
           

2. 更多的bytes資料加到散列

hash_obj .update(bytes)
           

3. 傳回加密後位元組類型的資料

傳回通過哈希傳遞的所有資料的散列,資料為位元組類型。調用此方法後,無法再将更多的資料送入散列

hash_obj .digest()
           
import uhashlib
import ubinascii

hash_obj  = uhashlib.sha256()  # 建立hash對象
hash_obj.update(b"QuecPython")
res = hash_obj.digest()
# b"\x1e\xc6gq\xb3\xa9\xac>\xa4\xc4O\x00\x9eTW\x97\xd4.\x9e}Bo\xff\x82u\x89Th\xfe'\xc6\xcd"
# 轉成十六進制表示
hex_msg = ubinascii.hexlify(res)
# b'1ec66771b3a9ac3ea4c44f009e545797d42e9e7d426fff8275895468fe27c6cd'
           

九. _thread - 多線程

_thread 子產品提供建立新線程的方法,并提供互斥鎖, 關于他的用法, 後續會有專門的介紹