本文主要介紹模塊列表如下:
os模塊
- os.getcwd() 獲取當前工作目錄
- os.chdir("/path/to") 將目錄切換到/path/to目錄,等價於shell中的cd命令
- os.makedirs('path1/path2') 創建多層目錄(可以多層目錄同時不存在),相當於shell中的mkdir -p 命令
- os.removedirs("path1/path2") 刪除空目錄,如果目錄不空就會報錯,首先刪除path2目錄,如果path1也變成空目錄了,也會刪除path1,知道所給目錄的第一層(即示例中的path1)停止
- os.mkdir("path") 創建單層目錄path,相當於shell中的mkdir,注:path目錄所在的上一層目錄必須已經存在
- os.rmdir("path") 刪除單層目錄path,相當於shell中的rmdir
- os.listdir("path") 列出指定目錄下的所有文件和子目錄,包括隱藏文件,返回值是列表
- os.remove("file") 刪除單個文件
- os.rename("a","b") 重命名(文件或目錄)
- os.stat("a") 獲取a(文件或目錄)的所有信息:返回值是一個os.stat_result類
- os.system("shell command") 運行shell命令,直接顯示運行結果,返回值是程序執行成功的code,非shell運行結果的返回值,0代表成功,非0失敗
os.path下方法
- os.path.abspath(path) 返回path的絕對路徑
- os.path.realpath(path) 返回path的絕對路徑,和abspath不同的是,如果path是一個連接,返回的是path所連接的絕對路徑
- oa.path.split("path") 將path分割成目錄和文件名,返回值是二元的元祖
- os.path.dirname("path") 返回path所在的目錄
- os.path.basename("path") 返回path文件名
- os.path.exists("a") 如果a存在,返回True;如果a不存在,返回False;a可以是文件也可以是目錄
- os.path.isabs("path") 如果path是絕對路徑,返回True
- os.path.isfile("path") 如果path是一個存在的文件,返回True。否則返回False
- os.path.isdir("path") 如果path是一個存在的目錄,則返回True。否則返回False
- os.path.join(path1[, path2[, ...]]) 將多個路徑組合后返回,第一個絕對路徑之前的參數將被忽略
- os.path.getsize("a") 返回a的大小(如果a是文件,就是文件大小;如果a是目錄,則是目錄內inode列表所占空間,而不是目錄內文件所占的空間大小;如果a是符號鏈接,是指鏈接文件的路徑名的字節數)
- os.path.getatime("a") 返回a所指向的文件或者目錄的最后訪問時間
- os.path.gettime("a") 返回a所指向的文件或者目錄的最后權限修改時間
- os.path.getmtime("a") 返回a所指向的文件或者目錄的最后內容修改時間
沒有小括號
- os.curdir 返回值是".",即當前目錄的相對路徑,注意:沒有小括號
- os.pardir 返回值是"..", 即上一層目錄的相對路徑,注意:沒有小括號
- os.sep 輸出操作系統的路徑分隔符,win下為"\\",Linux下為"/",沒有小括號
- os.linesep 輸出當前操作系統的行終止符,win下為"\t\n",Linux下為"\n",沒有小括號
- os.pathsep 輸出當前操作系統用於分割文件路徑的字符串,沒有小括號
- os.name 輸出當前使用平台,win->'nt'; Linux->'posix'
- os.environ 獲取系統環境變量,返回值是一個類,可以通過返回值的各種方法調用里面的值
sys模塊
- sys.argv 命令行list數據,第一個元素是程序本身
- sys.exit(a) 退出程序,如果a是假則正常退出,如果真,則異常退出,並返回a(假可以是0,False,空字符串等;真則不是空的數據)
- sys.version 打印python解釋程序的版本
- sys.path 返回模塊的搜索路徑,它對應的是一個list類型,可以通過list的方法進行修改
- sys.platform 返回操作系統的名稱
- sys.stdout.write("a") 標准輸出打印a(對應的還有stderr)
re模塊
re模塊的函數介紹
- re.match(pattern,string) 從頭開始匹配
- re.search(pattern,string) 匹配(如果pattern增加了^,就和match功能一樣)
- re.findall(pattern,string) 把所有匹配到的字符以 list形式 返回
- re.split(pattern,string) 將string按照pattern分割,返回列表,列表中的元素不包含pattern
- re.sub(pattern,replace,string) 將string中的pattern替換成replace
正則表達式符號含義
- "." 默認匹配除\n之外的任意一個字符,若指定flag DOTALL,則匹配任意字符,包括換行
- "^" 匹配字符開頭,若指定flags MULTILINE,這種(r"^a","\nabc\neee",flags=re.MULTILINE)也可以匹配上(不指定flags,"\nabc\neee"就是一行)
- "$" 匹配字符結尾,若指定flags MULTILINE,這種("foo$","bfoo\nsdfsf",flags=re.MULTILINE)也可以匹配上,同上
- "*" 匹配*號前的字符0次或多次
- "+" 匹配前一個字符1次或多次
- "?" 匹配前一個字符0次或1次
- "{m}" 匹配前一個字符m次
- "{m,n}" 匹配前一個字符m到n次(即最少m次,最多n次)
- "|" 匹配|左或|右的字符
- "(...)" 分組匹配,分組的順序:從左到右,從外到內
- 分組還可以細分,普通分組,命名分組,后向引用,前向肯定斷言,后向肯定斷言,前向否定斷言、后向否定斷言
- 普通分組,則是通過1,2.....來獲取匹配到信息,如re.search(r"(abc)","abcdefg").group(1)
- 命名分組,則是通過給分組命名來獲取匹配到的信息,如
(?P<name>正則表達式),這里的命名就是name,通過groupdict("name")函數獲取捕獲值
- 其他用的不多
- [...] 匹配中擴內的人一個字符,如果中括號前加^(即[^]),代表匹配非中括號內任一個字符
- "\A" 只從字符開頭匹配,re.search("\Aabc","alexabc") 是匹配不到的
- "\Z" 匹配字符結尾,同$
- "\d" 匹配數字[0-9]
- "\D" 匹配非數字
- "\w" 匹配[A-Za-z0-9]
- "\W" 匹配非[A-Za-z0-9]
- "\s" 匹配空白字符、\t、\n、\r
- "\S" 匹配\s的補集
- \d和\D,\w和\W,\s和\S每一對都是對方的補集,一起可以組成全部的字符
time模塊
- 在time模塊中有3中標示時間的方式:1.時間戳,2.格式化的時間字符串,3.元祖(struct_time,有9個元素)
- UTC(Coordinated Universal Time,協調世界時),世界標准時間,中國是UTC+8;DST(Daylight Saving Time)夏令時
- 時間戳(timestamp):通常來說,時間戳表示的是從1970年1月1日0:00:00開始按秒計算的量
- 元祖(struct_time)有9個元素,tm_year:年份,tm_mon:月,tm_mday:日期,tm_hour:小時,tm_min:分鍾,tm_sec:秒,tm_wday:星期中的第幾天(周一用0表示),tm_yday:一年中的第幾天,tm_isdst:是否為夏令時
函數介紹
time中各種類型時間的轉換,引用:https://blog.51cto.com/egon09/1840425
- time.time() 當前的時間,類型是時間戳(timestamp)
- time.sleep(timestamp) 程序睡眠,單位秒
- time.gmtime([timestamp]) 類型為struct_time;不傳遞參數,當前utc的時間;如果傳遞參數,則為從1970年1月1日0:00:00經過timestamp時間后的utc時間
- time.localtime([timestamp]) 類型為struct_time;不傳參數,是當前本地的時間;如果傳遞參數,則為從1970年1月1日0:00:00經過timestamp時間后的本地時間
- time.asctime([struct_time]) 類型為字符串,格式為"'Wed Jul 17 08:40:40 2019'"”;不傳遞參數,解析當前時間;傳遞參數,解析參數時間
- time.ctime([timestamp]) 類型為字符串,格式為"'Wed Jul 17 08:40:40 2019'"”;不傳遞參數,解析當前時間;傳遞參數,解析參數時間(和上面不同給的是傳遞參數類型不同)
- time.strptime(string,format) 返回struct_time類型,將string按照format解析,format格式下面介紹
- time.strftime(format[,tuple] 返回字符串,將時間按照format形式轉換為字符串格式,沒有指定tuple time,則默認使用localtime
-
- %y 兩位數的年份表示(00-99)
- %Y 四位數的年份表示(000-9999)
- %m 月份(01-12)
- %d 月內中的一天(0-31)
- %H 24小時制小時數(0-23)
- %I 12小時制小時數(01-12)
- %M 分鍾數(00-59)
- %S 秒(00-59)
- %a 本地簡化星期名稱
- %A 本地完整星期名稱
- %b 本地簡化的月份名稱
- %B 本地完整的月份名稱
- %c 本地相應的日期表示和時間表示,返回和time.ctime一樣
- %j 年內的一天(001-366)
- %p 本地A.M.或P.M.的等價符
- %U 一年中的星期數(00-53)星期天為星期的開始
- %w 星期(0-6),星期天為星期的開始
- %W 一年中的星期數(00-53)星期一為星期的開始
- %x 本地相應的日期表示
- %X 本地相應的時間表示
- %Z 當前時區的名稱 # 亂碼
- %% %號本身
datetime模塊
- datetime.dateime.now() 返回當前時間,類型是 datetime.datetime,
- datetime.timedelta() 這個函數不單獨使用,要配合now函數,對時間進行加減,比如:datetime.dateime.now() + datetime.timedelta(-3)
- timedelta的參數有:days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0
日期的函數還有calendar(日歷)模塊,詳細見:https://docs.python.org/3/library/calendar.html
random模塊
- random.random() 返回浮點型數字,區間為[0.0 1)---不包含1
- random.uniform(a,b) 返回浮點型數字,可自定義區間,[a,b)
- random.int(a,b) 返回整數,區間為[a,b]
- random.randrange(a,b) 返回整數,區間[a,b)區間性質和range函數一樣
- random.choice(seq) 返回seq中的一個元素
- random.shuffle(x) 對x重新洗牌,即打亂順序,x是一個列表
shutil模塊shutil
高級的文件,文件夾處理
- shutil.copyfilebj(src,dst) 拷貝文件對象,src和dst必須是文件句柄(即open后的文件句柄)
- shutil.copyfile(src,dst) 拷貝文件,src和dst是文件名稱(調用copyfilebj來實現的)
- shutil.copymode(src,dst) 拷貝文件權限,內容、組、用戶均不變,src和dst都是文件,且必須存在
- shutil.copystat(src,dst) 拷貝文件的狀態信息,包括mode,atime,ctime,flags等
- shutil.copy(src,dst) 拷貝文件和權限,src和dst都是文件
- shutil.copy2(src,dst) 拷貝文件和狀態,src和dst都是文件
- shutil.copytree(src,dst) 遞歸拷貝文件
- shutil.rmtree(path) 遞歸刪除文件
- shutil.move(src,dst) 遞歸移動文件
subprocess模塊
直接運行推薦使用run方法,如果使用更高級的可以直接使用Popen接口;如果想得到程序運行結果,推薦使用getstatusoutput(cmd)
-
subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None)
- args:標示要執行的命令,必須是一個字符串,字符串參數需要是列表形式,如果shell參數這只為true,那么可以將參數和命令放到一個字符串中,因為它是通過系統的shell執行
- 比如:如果有參數,必須是["ls","-al"],沒有參數可以寫"ls";如果shell為True,可以寫成“ls -a”
- 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 執行指定的命令。
- args:標示要執行的命令,必須是一個字符串,字符串參數需要是列表形式,如果shell參數這只為true,那么可以將參數和命令放到一個字符串中,因為它是通過系統的shell執行
- subprocess.getstatusoutput(cmd) 返回值是一個二元元組,第一個是exitcode(0代表運行成功,其他代表失敗),第二個是運行cmd返回的結果
- 類似的還有一個函數subprocess.getoutput(cmd) 只返回運行的結果
剩余部分請參考:python內置模塊介紹(二)