日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python的常用模块

發布時間:2025/3/21 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python的常用模块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄:

  • time模塊
  • random()模塊
  • os模塊
  • sys模塊
  • Json模塊
  • hashlib 模塊
  • subprocess模塊
  • paramiko模塊
  • re模塊

time模塊

time()模塊中的重要函數

time()模塊時間格式轉換

time()模塊時間轉換

  • 時間戳 1970年1月1日之后的秒, 即:time.time()
  • 格式化的字符串 2014-11-11 11:11, 即:time.strftime(’%Y-%m-%d’)
  • 結構化時間 元組包含了:年、日、星期等… time.struct_time 即:time.localtime()

time模塊時間轉換

import time print(time.time()) # 時間戳:1511166937.2178104 print(time.strftime('%Y-%m-%d')) # 格式化的字符串: 2017-11-20 print(time.localtime()) # 結構化時間(元組): (tm_year=2017, tm_mon=11...) print(time.gmtime()) # 將時間轉換成utc格式的元組格式: (tm_year=2017, tm_mon=11...)#1. 將結構化時間轉換成時間戳: 1511167004.0 print(time.mktime(time.localtime()))#2. 將格字符串時間轉換成結構化時間 元組: (tm_year=2017, tm_mon=11...) print(time.strptime('2014-11-11', '%Y-%m-%d'))#3. 結構化時間(元組) 轉換成 字符串時間 :2017-11-20 print(time.strftime('%Y-%m-%d', time.localtime())) # 默認當前時間#4. 將結構化時間(元組) 轉換成英文字符串時間 : Mon Nov 20 16:51:28 2017 print(time.asctime(time.localtime()))#5. 將時間戳轉成 英文字符串時間 : Mon Nov 20 16:51:28 2017 print(time.ctime(time.time()))

datetime獲取時間

import datetime #1、datetime.datetime獲取當前時間 print(datetime.datetime.now()) #2、獲取三天后的時間 print(datetime.datetime.now()+datetime.timedelta(+3)) #3、獲取三天前的時間 print(datetime.datetime.now()+datetime.timedelta(-3)) #4、獲取三個小時后的時間 print(datetime.datetime.now()+datetime.timedelta(hours=3)) #5、獲取三分鐘以前的時間 print(datetime.datetime.now()+datetime.timedelta(minutes = -3))import datetime print(datetime.datetime.now()) #2017-08-18 11:25:52.618873 print(datetime.datetime.now().date()) #2017-08-18 print(datetime.datetime.now().strftime("%Y-%m-%d %H-%M-%S")) #2017-08-18 11-25-52

random()模塊

random()模塊常用函數

random常用函數舉例

import random #⒈ 隨機整數: print(random.randint(0,99)) # 隨機選取0-99之間的整數 print(random.randrange(0, 101, 2)) # 隨機選取0-101之間的偶數#⒉ 隨機浮點數: print(random.random()) # 0.972654134347 print(random.uniform(1, 10)) # 4.14709813772#⒊ 隨機字符: print(random.choice('abcdefg')) # c print(random.sample('abcdefghij',3)) # ['j', 'f', 'c']

使用random實現四位驗證碼

  • 使用for循環實現
import random checkcode = '' for i in range(4):current = random.randrange(0,4)if current == i:tmp = chr(random.randint(65,90)) #65,90表示所有大寫字母else:tmp = random.randint(0,9)checkcode += str(tmp) print(checkcode)
  • 使用random.sample實現
import random import string str_source = string.ascii_letters + string.digits str_list = random.sample(str_source,7)#['i', 'Q', 'U', 'u', 'A', '0', '9'] print(str_list) str_final = ''.join(str_list)#iQUuA09 print(str_final) # 運行結果: jkFU2Ed

os模塊

os模塊常用方法

import os #1 當前工作目錄,即當前python腳本工作的目錄路徑 print(os.getcwd()) # C:\Users\admin\PycharmProjects\s14\Day5\test4#2 當前腳本工作目錄;相當于shell下cd os.chdir("C:\\Users\\admin\\PycharmProjects\\s14") os.chdir(r"C:\Users\admin\PycharmProjects\s14") print(os.getcwd()) # C:\Users\admin\PycharmProjects\s14#3 返回當前目錄: ('.') print(os.curdir) # ('.')#4 獲取當前目錄的父目錄字符串名:('..') print(os.pardir) # ('..')#5 可生成多層遞歸目錄 os.makedirs(r'C:\aaa\bbb') # 可以發現在C盤創建了文件夾/aaa/bbb#6 若目錄為空,則刪除,并遞歸到上一級目錄,如若也為空,則刪除,依此類推 os.removedirs(r'C:\aaa\bbb') # 刪除所有空目錄#7 生成單級目錄;相當于shell中mkdir dirname os.mkdir(r'C:\bbb') # 僅能創建單個目錄#8 刪除單級空目錄,若目錄不為空則無法刪除,報錯;相當于shell中rmdir dirname os.rmdir(r'C:\aaa') # 僅刪除指定的一個空目錄#9 列出指定目錄下的所有文件和子目錄,包括隱藏文件,并以列表方式打印 print(os.listdir(r"C:\Users\admin\PycharmProjects\s14"))#10 刪除一個文件 os.remove(r'C:\bbb\test.txt') # 指定刪除test.txt文件#11 重命名文件/目錄 os.rename(r'C:\bbb\test.txt',r'C:\bbb\test00.bak')#12 獲取文件/目錄信息 print(os.stat(r'C:\bbb\test.txt'))#13 輸出操作系統特定的路徑分隔符,win下為"\\",Linux下為"/" print(os.sep) # \#14 輸出當前平臺使用的行終止符,win下為"\r\n",Linux下為"\n" print(os.linesep)#15 輸出用于分割文件路徑的字符串 print(os.pathsep) # ; (分號)#16 輸出字符串指示當前使用平臺。win->'nt'; Linux->'posix' print(os.name) # nt#17 運行shell命令,直接顯示 os.system("bash command")#18 獲取系統環境變量 print(os.environ) # environ({'OS': 'Windows_NT', 'PUBLIC': ………….#19 返回path規范化的絕對路徑 print(os.path.abspath(r'C:/bbb/test.txt')) # C:\bbb\test.txt#20 將path分割成目錄和文件名二元組返回 print(os.path.split(r'C:/bbb/ccc')) # ('C:/bbb', 'ccc')#21 返回path的目錄。其實就是os.path.split(path)的第一個元素 print(os.path.dirname(r'C:/bbb/ccc')) # C:/bbb#22 返回path最后的文件名。如何path以/或\結尾,那么就會返回空值。即os.path.split(path)的第二個元素 print(os.path.basename(r'C:/bbb/ccc/ddd')) # ddd#23 如果path存在,返回True;如果path不存在,返回False print(os.path.exists(r'C:/bbb/ccc/')) # True#24 如果path是絕對路徑,返回True # True print(os.path.isabs(r"C:\Users\admin\PycharmProjects\s14\Day5\test4"))#25 如果path是一個存在的文件,返回True。否則返回False print(os.path.isfile(r'C:/bbb/ccc/test2.txt')) # True#26 如果path是一個存在的目錄,則返回True。否則返回False print(os.path.isdir(r'C:/bbb/ccc')) # True#28 返回path所指向的文件或者目錄的最后存取時間 print(os.path.getatime(r'C:/bbb/ccc/test2.txt')) # 1483509254.9647143#29 返回path所指向的文件或者目錄的最后修改時間 print(os.path.getmtime(r'C:/bbb/ccc/test2.txt')) # 1483510068.746478#30 無論linux還是windows,拼接出文件路徑 put_filename = '%s%s%s'%(self.home,os. path.sep, filename) #C:\Users\admin\PycharmProjects\s14\day10select版FTP\home

os命令創建文件夾并寫入文件file.txt文件

import osos.makedirs('C:/aaa/bbb/ccc/ddd',exist_ok=True) # exist_ok=True:如果存在當前文件夾不報錯 path = os.path.join('C:/aaa/bbb/ccc','ddd',) f_path = os.path.join(path,'file.txt')with open(f_path,'w',encoding='utf8') as f:f.write('are you ok!!')

os.popen獲取腳本執行結果

data.py

data = {'name':'aaa'} import json print json.dumps(data)

get_data.py

#! /usr/bin/env python # -*- coding: utf-8 -*- import os,jsonret = os.popen('python data.py') data = ret.read().strip() ret.close() data = json.loads(data) print data # {'name':'aaa'}

sys模塊

sys.argv          返回執行腳本傳入的參數sys.exit(n)      退出程序,正常退出時exit(0)sys.version    獲取Python解釋程序的版本信息sys.maxint    最大的Int值sys.path    返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值sys.platform    返回操作系統平臺名稱sys.stdout.write('please:')val = sys.stdin.readline()[:-1]

使用sys.argv返回執行腳本傳入的參數

import sys # C:\Users\tom\PycharmProjects\s14Review\day01> python test01.py 1 2 3 print(sys.argv) # 打印所有參數 ['test01.py', '1', '2', '3'] print(sys.argv[1:]) # 獲取索引 1 往后的所有參數 ['1', '2', '3']

Json模塊

json序列化

  • 序列化 (json.dumps) :是將內存中的對象存儲到硬盤,變成字符串
  • 反序列化(json.loads) : 將剛剛保存在硬盤中的內存對象從新加載到內存中
  • json.dumps( data,ensure_ascii=False, indent=4)

json序列化

#json序列化代碼 import json info = {'name':"tom","age" :"100" } f = open("test.txt",'w') # print(json.dumps(info)) f.write(json.dumps(info)) f.close()

json反序列化

#json反序列化代碼 import json f = open("test.txt","r") data = json.loads(f.read()) f.close() print(data["age"])

解決Json不可序列化datetime類型

import json,datetimeclass JsonCustomEncoder(json.JSONEncoder):def default(self, field):if isinstance(field, datetime.datetime):return field.strftime('%Y-%m-%d %H:%M:%S')elif isinstance(field, datetime.date):return field.strftime('%Y-%m-%d')else:return json.JSONEncoder.default(self, field)t = datetime.datetime.now()print(type(t),t) f = open('ttt','w') #指定將內容寫入到ttt文件中 f.write(json.dumps(t,cls=JsonCustomEncoder)) #使用時候只要在json.dumps增加個cls參數即可

hashlib 模塊

用于加密相關的操作,代替了md5模塊和sha模塊,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法

常見的五種加密方式

import hashlib#1 ######## md5 ######## # 目的:實現對b"HelloIt's me" 這句話進行md5加密 m = hashlib.md5() # 1)生成一個md5加密對象 m.update(b"Hello") # 2)使用m對 b"Hello" 加密 m.update(b"It's me") # 3) 使用m對 b"It's me"加密 print(m.hexdigest()) # 4) 最終加密結果就是對b"HelloIt's me"加密的md5值:5ddeb47b2f925ad0bf249c52e342728a#2 ######## sha1 ######## hash = hashlib.sha1() hash.update(b'admin') print(hash.hexdigest())#3 ######## sha256 ######## hash = hashlib.sha256() hash.update(b'admin') print(hash.hexdigest())#4 ######## sha384 ######## hash = hashlib.sha384() hash.update(b'admin') print(hash.hexdigest())#5 ######## sha512 ######## hash = hashlib.sha512() hash.update(b'admin') print(hash.hexdigest())

以上加密算法雖然依然非常厲害,但時候存在缺陷,即:通過撞庫可以反解。所以,
有必要對加密算法中添加自定義key再來做加密

hmac添加自定義key加密

######### hmac ######## import hmac h = hmac.new(b"123456","真實要傳的內容".encode(encoding="utf-8")) print(h.digest()) print(h.hexdigest()) # 注:hmac是一種雙重加密方法,前面是加密的內容,后面才是真實要傳的數據信息

subprocess模塊

subprocess原理以及常用的封裝函數

  • 運行python的時候,我們都是在創建并運行一個進程。像Linux進程那樣,一個進程可以fork一個子進程,并讓這個子進程exec另外一個程序
  • 在Python中,我們通過標準庫中的subprocess包來fork一個子進程,并運行一個外部的程序。
  • subprocess包中定義有數個創建子進程的函數,這些函數分別以不同的方式創建子進程,所以我們可以根據需要來從中選取一個使用
  • 另外subprocess還提供了一些管理標準流(standard stream)和管道(pipe)的工具,從而在進程間使用文本通信。

subprocess常用函數

#1、返回執行狀態:0 執行成功 retcode = subprocess.call(['ping', 'www.baidu.com', '-c5'])#2、返回執行狀態:0 執行成功,否則拋異常 subprocess.check_call(["ls", "-l"])#3、執行結果為元組:第1個元素是執行狀態,第2個是命令結果 >>> ret = subprocess.getstatusoutput('pwd') >>> ret (0, '/test01')#4、返回結果為 字符串 類型 >>> ret = subprocess.getoutput('ls -a') >>> ret '.\n..\ntest.py'#5、返回結果為'bytes'類型 >>> res=subprocess.check_output(['ls','-l']) >>> res.decode('utf8') '總用量 4\n-rwxrwxrwx. 1 root root 334 11月 21 09:02 test.py\n'

將dos格式文件轉換成unix格式

subprocess.check_output(['chmod', '+x', filepath]) subprocess.check_output(['dos2unix', filepath])

subprocess.Popen()

  • 實際上,上面的幾個函數都是基于Popen()的封裝(wrapper),這些封裝的目的在于讓我們容易使用子進程
  • 當我們想要更個性化我們的需求的時候,就要轉向Popen類,該類生成的對象用來代表子進程
  • 與上面的封裝不同,Popen對象創建后,主程序不會自動等待子進程完成。我們必須調用對象的wait()方法,父進程才會等待 (也就是阻塞block)
  • 從運行結果中看到,父進程在開啟子進程之后并沒有等待child的完成,而是直接運行print
  • paramiko模塊

    在windows中安裝paramiko

    pip3 install paramiko

    linux中scp命令的使用

    • ssh root@10.1.0.51 #ssh遠程登錄
    • scp -rp aa.txt root@10.1.0.50:/tmp/ #將本地aa.txt文件復制到10.1.0.50的/tmp文件夾中

    Paramiko模塊作用

    • 如果需要使用SSH從一個平臺連接到另外一個平臺,進行一系列的操作時
      比如:批量執行命令,批量上傳文件等操作,paramiko是最佳工具之一
    • paramiko是用python語言寫的一個模塊,遵循SSH2協議,支持以加密和認證的方式,進行遠程服務器的連接
    • 由于使用的是python這樣的能夠跨平臺運行的語言,所以所有python支持的平臺,如Linux, Solaris, BSD,MacOS X, Windows等,paramiko都可以支持
    • 如果需要使用SSH從一個平臺連接到另外一個平臺,進行一系列的操作時,paramiko是最佳工具之一
    • 現在如果需要從windows服務器上下載Linux服務器文件:
      (1)使用paramiko可以很好的解決以上問題,它僅需要在本地上安裝相應的軟件(python以及PyCrypto)
      (2) 對遠程服務器沒有配置要求,對于連接多臺服務器,進行復雜的連接操作特別有幫助

    re模塊

    re模塊常用的表達式符號

    1 '.' 默認匹配除\n之外的任意一個字符,若指定flag DOTALL,則匹配任意字符,包括換行2 '^' 匹配字符開頭,若指定flags MULTILINE,這種也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)3 '$' 匹配字符結尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以4 '*' 匹配*號前的字符0次或多次,re.findall("ab*","cabb3abcbbac") 結果為['abb', 'ab', 'a']5 '+' 匹配前一個字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 結果['ab', 'abb']6 '?' 匹配前一個字符1次或07 '{m}' 匹配前一個字符m次8 '{n,m}' 匹配前一個字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 結果'abb', 'ab', 'abb']9 '|' 匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 結果'ABC' 10 '(...)' 分組匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 結果 abcabca456c 11 12 '\A' 只從字符開頭匹配,re.search("\Aabc","alexabc") 是匹配不到的 13 '\Z' 匹配字符結尾,同$ 14 '\d' 匹配數字0-9 15 '\D' 匹配非數字 16 '\w' 匹配[A-Za-z0-9] 17 '\W' 匹配非[A-Za-z0-9] 18 's' 匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 結果 '\t' 19 \b 匹配一個單詞邊界,也就是指單詞和空格間的位置,如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er” 20 \B 匹配非單詞邊界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”

    re模塊常用函數

    re.compile(pattern[, flags])

    • 1)把一個正則表達式pattern編譯成正則對象,以便可以用正則對象的match和search方法
    • 2)用了re.compile以后,正則對象會得到保留,這樣在需要多次運用這個正則對象的時候,效率會有較大的提升

    re.complie的使用

    import re mobile_re = re.compile(r'^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$') ret = re.match(mobile_re,'18538762511') print(ret) # <_sre.SRE_Match object; span=(0, 11), match='18538652511'>

    search(pattern, string[, flags]) 和 match(pattern, string[, flags])

    • 1)match :只從字符串的開始與正則表達式匹配,匹配成功返回matchobject,否則返回none
    • 2)search :將字符串的所有字串嘗試與正則表達式匹配,如果所有的字串都沒有匹配成功,返回none,否則返回matchobject

    search 和match的比較

    import re a =re.match('www.bai', 'www.baidu.com') b = re.match('bai', 'www.baidu.com') print(a.group()) # www.bai print(b) # None# 無論有多少個匹配的只會匹配一個 c = re.search('bai', 'www.baidubaidu.com') print(c) # <_sre.SRE_Match object; span=(4, 7), match='bai'> print(c.group()) # bai

    split(pattern, string[, maxsplit=0])

    作用:將字符串以指定分割方式,格式化成列表  
     
    split使用

    import re text = 'aa 1bb###2cc3ddd' print(re.split('\W+', text)) # ['aa', '1bb', '2cc3ddd'] print(re.split('\W', text)) # ['aa', '1bb', '', '', '2cc3ddd'] print(re.split('\d', text)) # ['aa ', 'bb###', 'cc', 'ddd'] print(re.split('#', text)) # ['aa 1bb', '', '', '2cc3ddd'] print(re.split('#+', text)) # ['aa 1bb', '2cc3ddd']

    findall(pattern, string)

    作用:正則表達式 re.findall 方法能夠以列表的形式返回能匹配的子串

    findall使用

    import re p = re.compile(r'\d+') print(p.findall('one1two2three3four4')) # ['1', '2', '3', '4'] print(re.findall('o','one1two2three3four4')) # ['o', 'o', 'o'] print(re.findall('\w+', 'he.llo, wo#rld!')) # ['he', 'llo', 'wo', 'rld']

    sub(pat, repl, string[, count=0])

    1)替換,將string里匹配pattern的部分,用repl替換掉,最多替換count次然后返回替換后的字符串

    2)如果string里沒有可以匹配pattern的串,將被原封不動地返回

    3)repl可以是一個字符串,也可以是一個函數

    4) 如果repl是個字符串,則其中的反斜桿會被處理過,比如 \n 會被轉成換行符,反斜桿加數字會被替換成相應的組,比如 \6 表示pattern匹配到的第6個組的內容

    sub使用

    import re test="Hi, nice to meet you where are you from?" print(re.sub(r'\s','-',test)) # Hi,-nice-to-meet-you-where-are-you-from? print(re.sub(r'\s','-',test,5)) # Hi,-nice-to-meet-you-where are you from? print(re.sub('o','**',test)) # Hi, nice t** meet y**u where are y**u fr**m?

    escape(string)

    1) re.escape(pattern) 可以對字符串中所有可能被解釋為正則運算符的字符進行轉義的應用函數。

    2) 如果字符串很長且包含很多特殊技字符,而你又不想輸入一大堆反斜杠,或者字符串來自于用戶(比如通過raw_input函數獲取輸入的內容),
    且要用作正則表達式的一部分的時候,可以用這個函數

    escape使用

    import re print(re.escape('www.python.org'))

    re模塊中的匹配對象和組 group()

    1)group方法返回模式中與給定組匹配的字符串,如果沒有給定匹配組號,默認為組0

    2)m.group() == m.group(0) == 所有匹配的字符

    group()匹配之返回匹配索引

    import re m = re.match('www\.(.*)\..*','www.baidu.com') print(m.group(1)) # baidu print(m.start(1)) # 4 print(m.end(1)) # 9 print(m.span(1)) # (4, 9)

    詳細鏈接參考這個

    總結

    以上是生活随笔為你收集整理的Python的常用模块的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。