乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Python爬蟲與數(shù)據分析之模塊:內置模塊、開源模塊、自定義模塊

       看見就非常 2020-04-30

      模塊,用一砣代碼實現(xiàn)了某個功能的代碼集合。 

      類似于函數(shù)式編程和面向過程編程,函數(shù)式編程則完成一個功能,其他代碼用來調用即可,提供了代碼的重用性和代碼間的耦合。而對于一個復雜的功能來,可能需要多個函數(shù)才能完成(函數(shù)又可以在不同的.py文件中),n個 .py 文件組成的代碼集合就稱為模塊。

      如:os 是系統(tǒng)相關的模塊;file是文件操作相關的模塊

      模塊分為三種:

      • 自定義模塊

      • 內置模塊

      • 開源模塊

      自定義模塊

      1、定義模塊

      情景一:

        

      情景二:

        

      情景三:

        

      2、導入模塊

      Python之所以應用越來越廣泛,在一定程度上也依賴于其為程序員提供了大量的模塊以供使用,如果想要使用模塊,則需要導入。導入模塊有一下幾種方法:

      1

      2

      3

      4

      import module

      from module.xx.xx import xx

      from module.xx.xx import xx as rename  

      from module.xx.xx import *

      導入模塊其實就是告訴Python解釋器去解釋那個py文件

      • 導入一個py文件,解釋器解釋該py文件

      • 導入一個包,解釋器解釋該包下的 __init__.py 文件

      那么問題來了,導入模塊時是根據那個路徑作為基準來進行的呢?即:sys.path

      1

      2

      3

      4

      5

      import sys

      print sys.path

      結果:

      ['/Users/wupeiqi/PycharmProjects/calculator/p1/pp1', '/usr/local/lib/python2.7/site-packages/setuptools-15.2-py2.7.egg', '/usr/local/lib/python2.7/site-packages/distribute-0.6.28-py2.7.egg', '/usr/local/lib/python2.7/site-packages/MySQL_python-1.2.4b4-py2.7-macosx-10.10-x86_64.egg', '/usr/local/lib/python2.7/site-packages/xlutils-1.7.1-py2.7.egg', '/usr/local/lib/python2.7/site-packages/xlwt-1.0.0-py2.7.egg', '/usr/local/lib/python2.7/site-packages/xlrd-0.9.3-py2.7.egg', '/usr/local/lib/python2.7/site-packages/tornado-4.1-py2.7-macosx-10.10-x86_64.egg', '/usr/local/lib/python2.7/site-packages/backports.ssl_match_hostname-3.4.0.2-py2.7.egg', '/usr/local/lib/python2.7/site-packages/certifi-2015.4.28-py2.7.egg', '/usr/local/lib/python2.7/site-packages/pyOpenSSL-0.15.1-py2.7.egg', '/usr/local/lib/python2.7/site-packages/six-1.9.0-py2.7.egg', '/usr/local/lib/python2.7/site-packages/cryptography-0.9.1-py2.7-macosx-10.10-x86_64.egg', '/usr/local/lib/python2.7/site-packages/cffi-1.1.1-py2.7-macosx-10.10-x86_64.egg', '/usr/local/lib/python2.7/site-packages/ipaddress-1.0.7-py2.7.egg', '/usr/local/lib/python2.7/site-packages/enum34-1.0.4-py2.7.egg', '/usr/local/lib/python2.7/site-packages/pyasn1-0.1.7-py2.7.egg', '/usr/local/lib/python2.7/site-packages/idna-2.0-py2.7.egg', '/usr/local/lib/python2.7/site-packages/pycparser-2.13-py2.7.egg', '/usr/local/lib/python2.7/site-packages/Django-1.7.8-py2.7.egg', '/usr/local/lib/python2.7/site-packages/paramiko-1.10.1-py2.7.egg', '/usr/local/lib/python2.7/site-packages/gevent-1.0.2-py2.7-macosx-10.10-x86_64.egg', '/usr/local/lib/python2.7/site-packages/greenlet-0.4.7-py2.7-macosx-10.10-x86_64.egg', '/Users/wupeiqi/PycharmProjects/calculator', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', '/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/site-packages', '/Library/Python/2.7/site-packages']

      如果sys.path路徑列表沒有你想要的路徑,可以通過 sys.path.append('路徑') 添加。
      通過os模塊可以獲取各種目錄,例如:

      1. import sys
      2. import os
      3. pre_path = os.path.abspath('../')
      4. sys.path.append(pre_path)

      開源模塊

      一、下載安裝

      下載安裝有兩種方式:

      yum 
      pip
      apt-get
      ...

        下載源碼

      解壓源碼
      進入目錄
      編譯源碼    python setup.py build
      安裝源碼    python setup.py install

      注:在使用源碼安裝時,需要使用到gcc編譯和python開發(fā)環(huán)境,所以,需要先執(zhí)行:

      1

      2

      3

      4

      yum install gcc

      yum install python-devel

      apt-get python-dev

      安裝成功后,模塊會自動安裝到 sys.path 中的某個目錄中,如:

      1

      /usr/lib/python2.7/site-packages/

      二、導入模塊

      同自定義模塊中導入的方式

      三、模塊 paramiko

      paramiko是一個用于做遠程控制的模塊,使用該模塊可以對遠程服務器進行命令或文件操作,值得一說的是,fabric和ansible內部的遠程管理就是使用的paramiko來現(xiàn)實。

      1、下載安裝

      1

      pip3 install paramiko

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      # pycrypto,由于 paramiko 模塊內部依賴pycrypto,所以先下載安裝pycrypto

      # 下載安裝 pycrypto

      wget http://files.cnblogs.com/files/wupeiqi/pycrypto-2.6.1.tar.gz

      tar -xvf pycrypto-2.6.1.tar.gz

      cd pycrypto-2.6.1

      python setup.py build

      python setup.py install

      進入python環(huán)境,導入Crypto檢查是否安裝成功

      # 下載安裝 paramiko

      wget http://files.cnblogs.com/files/wupeiqi/paramiko-1.10.1.tar.gz

      tar -xvf paramiko-1.10.1.tar.gz

      cd paramiko-1.10.1

      python setup.py build

      python setup.py install

      # 進入python環(huán)境,導入paramiko檢查是否安裝成功

      2、使用模塊

      1. #!/usr/bin/env python
      2. #coding:utf-8
      3. import paramiko
      4. ssh = paramiko.SSHClient()
      5. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
      6. ssh.connect('192.168.1.108', 22, 'alex', '123')
      7. stdin, stdout, stderr = ssh.exec_command('df')
      8. print stdout.read()
      9. ssh.close();
      10. import paramiko
      11. private_key_path = '/home/auto/.ssh/id_rsa'
      12. key = paramiko.RSAKey.from_private_key_file(private_key_path)
      13. ssh = paramiko.SSHClient()
      14. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
      15. ssh.connect('主機名 ', 端口, '用戶名', key)
      16. stdin, stdout, stderr = ssh.exec_command('df')
      17. print stdout.read()
      18. ssh.close()
      19. import os,sys
      20. import paramiko
      21. t = paramiko.Transport(('182.92.219.86',22))
      22. t.connect(username='wupeiqi',password='123')
      23. sftp = paramiko.SFTPClient.from_transport(t)
      24. sftp.put('/tmp/test.py','/tmp/test.py')
      25. t.close()
      26. import os,sys
      27. import paramiko
      28. t = paramiko.Transport(('182.92.219.86',22))
      29. t.connect(username='wupeiqi',password='123')
      30. sftp = paramiko.SFTPClient.from_transport(t)
      31. sftp.get('/tmp/test.py','/tmp/test2.py')
      32. t.close()
      33. import paramiko
      34. pravie_key_path = '/home/auto/.ssh/id_rsa'
      35. key = paramiko.RSAKey.from_private_key_file(pravie_key_path)
      36. t = paramiko.Transport(('182.92.219.86',22))
      37. t.connect(username='wupeiqi',pkey=key)
      38. sftp = paramiko.SFTPClient.from_transport(t)
      39. sftp.put('/tmp/test3.py','/tmp/test3.py')
      40. t.close()
      41. import paramiko
      42. pravie_key_path = '/home/auto/.ssh/id_rsa'
      43. key = paramiko.RSAKey.from_private_key_file(pravie_key_path)
      44. t = paramiko.Transport(('182.92.219.86',22))
      45. t.connect(username='wupeiqi',pkey=key)
      46. sftp = paramiko.SFTPClient.from_transport(t)
      47. sftp.get('/tmp/test3.py','/tmp/test4.py')
      48. t.close()

      內置模塊

      一、os

      用于提供系統(tǒng)級別的操作

      1. os.getcwd() 獲取當前工作目錄,即當前python腳本工作的目錄路徑
      2. os.chdir("dirname") 改變當前腳本工作目錄;相當于shell下cd
      3. os.curdir 返回當前目錄: ('.')
      4. os.pardir 獲取當前目錄的父目錄字符串名:('..')
      5. os.makedirs('dirname1/dirname2') 可生成多層遞歸目錄
      6. os.removedirs('dirname1') 若目錄為空,則刪除,并遞歸到上一級目錄,如若也為空,則刪除,依此類推
      7. os.mkdir('dirname') 生成單級目錄;相當于shell中mkdir dirname
      8. os.rmdir('dirname') 刪除單級空目錄,若目錄不為空則無法刪除,報錯;相當于shell中rmdir dirname
      9. os.listdir('dirname') 列出指定目錄下的所有文件和子目錄,包括隱藏文件,并以列表方式打印
      10. os.remove() 刪除一個文件
      11. os.rename("oldname","newname") 重命名文件/目錄
      12. os.stat('path/filename') 獲取文件/目錄信息
      13. os.sep 輸出操作系統(tǒng)特定的路徑分隔符,win下為"\\",Linux下為"/"
      14. os.linesep 輸出當前平臺使用的行終止符,win下為"\t\n",Linux下為"\n"
      15. os.pathsep 輸出用于分割文件路徑的字符串
      16. os.name 輸出字符串指示當前使用平臺。win->'nt'; Linux->'posix'
      17. os.system("bash command") 運行shell命令,直接顯示
      18. os.environ 獲取系統(tǒng)環(huán)境變量
      19. os.path.abspath(path) 返回path規(guī)范化的絕對路徑
      20. os.path.split(path) 將path分割成目錄和文件名二元組返回
      21. os.path.dirname(path) 返回path的目錄。其實就是os.path.split(path)的第一個元素
      22. os.path.basename(path) 返回path最后的文件名。如何path以/或\結尾,那么就會返回空值。即os.path.split(path)的第二個元素
      23. os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
      24. os.path.isabs(path) 如果path是絕對路徑,返回True
      25. os.path.isfile(path) 如果path是一個存在的文件,返回True。否則返回False
      26. os.path.isdir(path) 如果path是一個存在的目錄,則返回True。否則返回False
      27. os.path.join(path1[, path2[, ...]]) 將多個路徑組合后返回,第一個絕對路徑之前的參數(shù)將被忽略
      28. os.path.getatime(path) 返回path所指向的文件或者目錄的最后存取時間
      29. os.path.getmtime(path) 返回path所指向的文件或者目錄的最后修改時間

      二、sys

      用于提供對解釋器相關的操作

      1. sys.argv 命令行參數(shù)List,第一個元素是程序本身路徑
      2. sys.exit(n) 退出程序,正常退出時exit(0)
      3. sys.version 獲取Python解釋程序的版本信息
      4. sys.maxint 最大的Int值
      5. sys.path 返回模塊的搜索路徑,初始化時使用PYTHONPATH環(huán)境變量的值
      6. sys.platform 返回操作系統(tǒng)平臺名稱
      7. sys.stdout.write('please:')
      8. val = sys.stdin.readline()[:-1]

      更多猛擊這里

      三、hashlib 

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

      1. import md5
      2. hash = md5.new()
      3. hash.update('admin')
      4. print hash.hexdigest()
      5. import sha
      6. hash = sha.new()
      7. hash.update('admin')
      8. print hash.hexdigest()

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      import hashlib

      # ######## md5 ########

      hash = hashlib.md5()

      hash.update('admin')

      print hash.hexdigest()

      # ######## sha1 ########

      hash = hashlib.sha1()

      hash.update('admin')

      print hash.hexdigest()

      # ######## sha256 ########

      hash = hashlib.sha256()

      hash.update('admin')

      print hash.hexdigest()

      # ######## sha384 ########

      hash = hashlib.sha384()

      hash.update('admin')

      print hash.hexdigest()

      # ######## sha512 ########

      hash = hashlib.sha512()

      hash.update('admin')

      print hash.hexdigest()

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

      1

      2

      3

      4

      5

      6

      7

      import hashlib

      # ######## md5 ########

      hash = hashlib.md5('898oaFs09f')

      hash.update('admin')

      print hash.hexdigest()

      還不夠吊?python 還有一個 hmac 模塊,它內部對我們創(chuàng)建 key 和 內容 再進行處理然后再加密

      1

      2

      3

      4

      import hmac

      h = hmac.new('wueiqi')

      h.update('hellowo')

      print h.hexdigest()

      不能再牛逼了?。?!

      四、json  pickle 

      用于序列化的兩個模塊

      • json,用于字符串 和 python數(shù)據類型間進行轉換

      • pickle,用于python特有的類型 和 python的數(shù)據類型間進行轉換

      Json模塊提供了四個功能:dumps、dump、loads、load

      pickle模塊提供了四個功能:dumps、dump、loads、load

      五、執(zhí)行系統(tǒng)命令 

      可以執(zhí)行shell命令的相關模塊和函數(shù)有:

      • os.system

      • os.spawn*

      • os.popen*          --廢棄

      • popen2.*           --廢棄

      • commands.*      --廢棄,3.x中被移除

      import commands

      result = commands.getoutput('cmd')
      result = commands.getstatus('cmd')
      result = commands.getstatusoutput('cmd')

      以上執(zhí)行shell命令的相關的模塊和函數(shù)的功能均在 subprocess 模塊中實現(xiàn),并提供了更豐富的功能。

      call 

      執(zhí)行命令,返回狀態(tài)碼

      1

      2

      ret = subprocess.call(["ls", "-l"], shell=False)

      ret = subprocess.call("ls -l", shell=True)

      shell = True ,允許 shell 命令是字符串形式

      check_call

      執(zhí)行命令,如果執(zhí)行狀態(tài)碼是 0 ,則返回0,否則拋異常

      1

      2

      subprocess.check_call(["ls", "-l"])

      subprocess.check_call("exit 1", shell=True)

      check_output

      執(zhí)行命令,如果狀態(tài)碼是 0 ,則返回執(zhí)行結果,否則拋異常

      1

      2

      subprocess.check_output(["echo", "Hello World!"])

      subprocess.check_output("exit 1", shell=True)

      subprocess.Popen(...)

      用于執(zhí)行復雜的系統(tǒng)命令

      參數(shù):

      • args:shell命令,可以是字符串或者序列類型(如:list,元組)

      • bufsize:指定緩沖。0 無緩沖,1 行緩沖,其他 緩沖區(qū)大小,負值 系統(tǒng)緩沖

      • stdin, stdout, stderr:分別表示程序的標準輸入、輸出、錯誤句柄

      • preexec_fn:只在Unix平臺下有效,用于指定一個可執(zhí)行對象(callable object),它將在子進程運行之前被調用

      • close_sfs:在windows平臺下,如果close_fds被設置為True,則新創(chuàng)建的子進程將不會繼承父進程的輸入、輸出、錯誤管道。
        所以不能將close_fds設置為True同時重定向子進程的標準輸入、輸出與錯誤(stdin, stdout, stderr)。

      • shell:同上

      • cwd:用于設置子進程的當前目錄

      • env:用于指定子進程的環(huán)境變量。如果env = None,子進程的環(huán)境變量將從父進程中繼承。

      • universal_newlines:不同系統(tǒng)的換行符不同,True -> 同意使用 \n

      • startupinfo與createionflags只在windows下有效
        將被傳遞給底層的CreateProcess()函數(shù),用于設置子進程的一些屬性,如:主窗口的外觀,進程的優(yōu)先級等等

      終端輸入的命令分為兩種:

      • 輸入即可得到輸出,如:ifconfig

      • 輸入進行某環(huán)境,依賴再輸入,如:python

      1. import subprocess
      2. obj = subprocess.Popen("mkdir t3", shell=True, cwd='/home/dev',)
      3. import subprocess
      4. obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
      5. obj.stdin.write('print 1 \n ')
      6. obj.stdin.write('print 2 \n ')
      7. obj.stdin.write('print 3 \n ')
      8. obj.stdin.write('print 4 \n ')
      9. obj.stdin.close()
      10. cmd_out = obj.stdout.read()
      11. obj.stdout.close()
      12. cmd_error = obj.stderr.read()
      13. obj.stderr.close()
      14. print cmd_out
      15. print cmd_error
      16. import subprocess
      17. obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
      18. obj.stdin.write('print 1 \n ')
      19. obj.stdin.write('print 2 \n ')
      20. obj.stdin.write('print 3 \n ')
      21. obj.stdin.write('print 4 \n ')
      22. out_error_list = obj.communicate()
      23. print out_error_list
      24. import subprocess
      25. obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
      26. out_error_list = obj.communicate('print "hello"')
      27. print out_error_list

      六、shutil

      高級的 文件、文件夾、壓縮包 處理模塊

      1. shutil.copyfileobj(fsrc, fdst[, length])
      2. 將文件內容拷貝到另一個文件中,可以部分內容
      3. shutil.copyfile(src, dst)
      4. 拷貝文件
      5. shutil.copymode(src, dst)
      6. 僅拷貝權限。內容、組、用戶均不變
      7. shutil.copystat(src, dst)
      8. 拷貝狀態(tài)的信息,包括:mode bits, atime, mtime, flags
      9. shutil.copy(src, dst)
      10. 拷貝文件和權限
      11. shutil.copy2(src, dst)
      12. 拷貝文件和狀態(tài)信息
      13. shutil.ignore_patterns(*patterns)
      14. shutil.copytree(src, dst, symlinks=False, ignore=None)
      15. 遞歸的去拷貝文件
      16. 例如:copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))
      17. shutil.rmtree(path[, ignore_errors[, onerror]])
      18. 遞歸的去刪除文件
      19. shutil.move(src, dst)
      20. 遞歸的去移動文件
      21. shutil.make_archive(base_name, format,...)

      創(chuàng)建壓縮包并返回文件路徑,例如:zip、tar

      • base_name: 壓縮包的文件名,也可以是壓縮包的路徑。只是文件名時,則保存至當前目錄,否則保存至指定路徑,
        如:www                        =>保存至當前路徑
        如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/

      • format: 壓縮包種類,“zip”, “tar”, “bztar”,“gztar”

      • root_dir: 要壓縮的文件夾路徑(默認當前目錄)

      • owner: 用戶,默認當前用戶

      • group: 組,默認當前組

      • logger: 用于記錄日志,通常是logging.Logger對象

      1

      2

      3

      4

      5

      6

      7

      8

      9

      #將 /Users/wupeiqi/Downloads/test 下的文件打包放置當前程序目錄

      import shutil

      ret = shutil.make_archive("wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')

      #將 /Users/wupeiqi/Downloads/test 下的文件打包放置 /Users/wupeiqi/目錄

      import shutil

      ret = shutil.make_archive("/Users/wupeiqi/wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')

      shutil 對壓縮包的處理是調用 ZipFile 和 TarFile 兩個模塊來進行的,詳細:

      1. import zipfile
      2. # 壓縮
      3. z = zipfile.ZipFile('laxi.zip', 'w')
      4. z.write('a.log')
      5. z.write('data.data')
      6. z.close()
      7. # 解壓
      8. z = zipfile.ZipFile('laxi.zip', 'r')
      9. z.extractall()
      10. z.close()
      11. import tarfile
      12. # 壓縮
      13. tar = tarfile.open('your.tar','w')
      14. tar.add('/Users/wupeiqi/PycharmProjects/bbs2.zip', arcname='bbs2.zip')
      15. tar.add('/Users/wupeiqi/PycharmProjects/cmdb.zip', arcname='cmdb.zip')
      16. tar.close()
      17. # 解壓
      18. tar = tarfile.open('your.tar','r')
      19. tar.extractall() # 可設置解壓地址
      20. tar.close()

      、logging

      用于便捷記錄日志且線程安全的模塊

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      import logging

      logging.basicConfig(filename='log.log',

                          format='%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s',

                          datefmt='%Y-%m-%d %H:%M:%S %p',

                          level=10)

      logging.debug('debug')

      logging.info('info')

      logging.warning('warning')

      logging.error('error')

      logging.critical('critical')

      logging.log(10,'log')

      對于等級:

      1

      2

      3

      4

      5

      6

      7

      8

      CRITICAL = 50

      FATAL = CRITICAL

      ERROR = 40

      WARNING = 30

      WARN = WARNING

      INFO = 20

      DEBUG = 10

      NOTSET = 0

      只有大于當前日志等級的操作才會被記錄。

      對于格式,有如下屬性可是配置:

      、time

      時間相關的操作,時間有三種表示方式:

      • 時間戳               1970年1月1日之后的秒,即:time.time()

      • 格式化的字符串    2014-11-11 11:11,    即:time.strftime('%Y-%m-%d')

      • 結構化時間          元組包含了:年、日、星期等... time.struct_time    即:time.localtime()

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      print time.time()

      print time.mktime(time.localtime())

      print time.gmtime()    #可加時間戳參數(shù)

      print time.localtime() #可加時間戳參數(shù)

      print time.strptime('2014-11-11', '%Y-%m-%d')

      print time.strftime('%Y-%m-%d') #默認當前時間

      print time.strftime('%Y-%m-%d',time.localtime()) #默認當前時間

      print time.asctime()

      print time.asctime(time.localtime())

      print time.ctime(time.time())

      import datetime

      '''

      datetime.date:表示日期的類。常用的屬性有year, month, day

      datetime.time:表示時間的類。常用的屬性有hour, minute, second, microsecond

      datetime.datetime:表示日期時間

      datetime.timedelta:表示時間間隔,即兩個時間點之間的長度

      timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])

      strftime("%Y-%m-%d")

      '''

      import datetime

      print datetime.datetime.now()

      print datetime.datetime.now() - datetime.timedelta(days=5)

      、re 

      re模塊用于對python的正則表達式的操作。

      字符:

        . 匹配除換行符以外的任意字符
        \w 匹配字母或數(shù)字或下劃線或漢字
        \s 匹配任意的空白符
        \d 匹配數(shù)字
        \b 匹配單詞的開始或結束
        ^ 匹配字符串的開始
        $ 匹配字符串的結束

      次數(shù):

        * 重復零次或更多次
        + 重復一次或更多次
        ? 重復零次或一次
        {n} 重復n次
        {n,} 重復n次或更多次
        {n,m} 重復n到m次

      IP:
      ^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$
      手機號:
      ^1[3|4|5|8][0-9]\d{8}$

      1、match(pattern, string, flags=0)

      從起始位置開始根據模型去字符串中匹配指定內容,匹配單個

      • 正則表達式

      • 要匹配的字符串

      • 標志位,用于控制正則表達式的匹配方式

      1. import re
      2. obj = re.match('\d+', '123uuasf')
      3. if obj:
      4. print obj.group()
      5. # flags
      6. I = IGNORECASE = sre_compile.SRE_FLAG_IGNORECASE # ignore case
      7. L = LOCALE = sre_compile.SRE_FLAG_LOCALE # assume current 8-bit locale
      8. U = UNICODE = sre_compile.SRE_FLAG_UNICODE # assume unicode locale
      9. M = MULTILINE = sre_compile.SRE_FLAG_MULTILINE # make anchors look for newline
      10. S = DOTALL = sre_compile.SRE_FLAG_DOTALL # make dot match newline
      11. X = VERBOSE = sre_compile.SRE_FLAG_VERBOSE # ignore whitespace and comments

      2、search(pattern, string, flags=0)

      根據模型去字符串中匹配指定內容,匹配單個

      import re
      obj = re.search('\d+', 'u123uu888asf')
      if obj:
      1.     print obj.group()

      3、group和groups

          a = "123abc456"

      print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group()
      print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(0)
      print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(1)
      print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(2)
      print re.search("([0-9]*)([a-z]*)([0-9]*)", a).groups()

      4、findall(pattern, string, flags=0)

      上述兩中方式均用于匹配單值,即:只能匹配字符串中的一個,如果想要匹配到字符串中所有符合條件的元素,則需要使用 findall。

      import re
      obj = re.findall('\d+', 'fa123uu888asf')
      print obj

      5、sub(pattern, repl, string, count=0, flags=0)

      用于替換匹配的字符串

      content = "123abc456"
      new_content = re.sub('\d+', 'sb', content)
      # new_content = re.sub('\d+', 'sb', content, 1)
      print new_content

      相比于str.replace功能更加強大

      6、split(pattern, string, maxsplit=0, flags=0)

      根據指定匹配進行分組

      1. content = "'1 - 2 * ((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2) )'"
      2. new_content = re.split('\*', content)
      3. # new_content = re.split('\*', content, 1)
      4. print new_content
      5. content = "'1 - 2 * ((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2) )'"
      6. new_content = re.split('[\+\-\*\/]+', content)
      7. # new_content = re.split('\*', content, 1)
      8. print new_content
      9. inpp = '1-2*((60-30 +(-40-5)*(9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2))'
      10. inpp = re.sub('\s*','',inpp)
      11. new_content = re.split('\(([\+\-\*\/]?\d+[\+\-\*\/]?\d+){1}\)', inpp, 1)
      12. print new_content

      相比于str.split更加強大  

      實例:計算器源碼

      十、random

      隨機數(shù)

      1

      2

      3

      4

      mport random

      print random.random()

      print random.randint(1,2)

      print random.randrange(1,10)

      隨機驗證碼實例:

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      import random

      checkcode = ''

      for i in range(4):

          current = random.randrange(0,4)

          if current != i:

              temp = chr(random.randint(65,90))

          else:

              temp = random.randint(0,9)

          checkcode += str(temp)

      print checkcode

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多