6.python模塊(導入,內置,自定義,開源)

来源:http://www.cnblogs.com/liu-yao/archive/2016/02/11/5186322.html
-Advertisement-
Play Games

一、模塊 1.模塊簡介 模塊是一個包含所有你定義的函數和變數的文件,其尾碼名是.py。模塊可以被別的程式引入,以使用該模塊中的函數等功能。這也是使用python標準庫的方法。 類似於函數式編程和麵向過程編程,函數式編程則完成一個功能,其他代碼用來調用即可,提供了代碼的重用性和代碼間的耦合。而對於一個


一、模塊

1.模塊簡介

模塊是一個包含所有你定義的函數和變數的文件,其尾碼名是.py。模塊可以被別的程式引入,以使用該模塊中的函數等功能。這也是使用python標準庫的方法。

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

2.模塊的引入

在Python中用關鍵字import來引入某個模塊,比如要引用模塊math,就可以在文件最開始的地方用import math來引入。在調用math模塊中的函數時,必須這樣引用:

1 2 3 4 模塊名.函數名 例: import math import sys

 

有時候我們只需要用到模塊中的某個函數,只需要引入該函數即可,此時可以通過語句

 from 模塊名 import 函數名1,函數名2....

例:

1 2 3 4 5 6 7 import module #從某個模塊導入某個功能 from module.xx.xx import xx #從某個模塊導入某個功能,並且給他個別名 from module.xx.xx import xx as rename  #從某個模塊導入所有 from module.xx.xx import *

模塊分為三種:

  • 自定義模塊

  • 內置模塊

  • 開源模塊

3.模塊的安裝

(1)yum install 模塊名

(2)apt-get

(3)pip安裝 參考使用(點擊

(4)源碼安裝

1 2 3 4 5 6 需要編譯環境:yum install python-devel gcc 下載源碼包:wget http://xxxxxxxxxxx.tar 解壓:tar -xvf xxx.tar 進入:cd xxx 編譯:python setup.py build 安裝:python setup.py install

二、自定義模塊

1.在Python中,每個Python文件都可以作為一個模塊,模塊的名字就是文件的名字。

例:

寫一個模塊(模塊文件要和代碼文件在同一目錄下)

1 2 3 4 5 6 7 8 9 10 #vim moudle_test.py #寫入如下代碼 #!/usr/bin/env python3 print ('自定義 moudle') #調用 #vim test.py #!/usr/bin/env python3 #導入自定義模塊 import moudle_test #執行test.py

2.模塊文件為單獨文件夾 ,文件夾和代碼在同一目錄下

__init__


 

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

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

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

3.sys.path添加目錄

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

 

三、內置模塊

1.os模塊 提供系統級別的操作

os.getcwd() 獲取當前工作目錄,即當前python腳本工作的目錄路徑
1 2 3 >>> os.getcwd() '/root' >>>

 


os.chdir("目錄名")  改變當前腳本工作目錄;相當於linux下cd命令
1 2 3 4 >>> os.chdir('/usr/local') >>> os.getcwd() '/usr/local' >>>


os.curdir 返回當前目錄: ('.')
1 2 >>> os.curdir '.'

os.pardir  獲取當前目錄的父目錄字元串名:('..')
1 2 >>> os.pardir '..'

os.makedirs('目錄1/目錄2') 可生成多層遞歸目錄(相當於linux下mkdir -p)
1 2 >>> os.makedirs('/python/moudle/') # ll /python/moudle/

os.removedirs('目錄') 若目錄為空,則刪除,並遞歸到上一級目錄,如若也為空,則刪除,依此類推
1 2 3 >>> os.removedirs('/python/moudle') #a目錄中除了有一個b目錄外,再沒有其它的目錄和文件。 #b目錄中必須是一個空目錄。 如果想實現類似rm -rf的功能可以使用shutil模塊

os.mkdir('目錄')  生成單級目錄;相當於shell中mkdir 目錄
1 >>> os.mkdir('/python')

os.rmdir('目錄')  刪除單級空目錄,若目錄不為空則無法刪除,報錯;相當於shell中rmdir
1 2 3 4 5 >>> os.rmdir('/python') >>> os.rmdir('/python') Traceback (most recent call last):   File "<stdin>", line 1, in <module> FileNotFoundError: [Errno 2] No such file or directory: '/python'

os.listdir('目錄') 列出指定目錄下的所有文件和子目錄,包括隱藏文件,並以列表方式列印
1 2 >>> os.listdir('/root') ['.Xauthority', '[email protected]', '.py.swp', '.ssh', 'in.sh', '1', 'IPy-0.81.tar.gz', 'Dockerssh', 'id_rsa.pub', 'psutil-2.0.0.tar.gz', '.python_history', '.bashrc', 'ansible', '.bash_history', '.vim', 'IPy-0.81', '.pip', '.profile', '.ansible', 'python', '.dockercfg', 'Docker', 'util-linux-2.27', '.viminfo', 'util-linux-2.27.tar.gz', 'ubuntu_14.04.tar', '__pycache__', 'psutil-2.0.0', 'xx.py', 'ip.py', 'DockerNginx', '.cache', 'dict_shop.py']
os.remove()刪除一個文件
1 >>> os.remove('/root/xx.py')

os.rename("原名","新名")  重命名文件/目錄
1 2 3 4 5 >>> os.listdir('/python') ['oldtouch'] >>> os.rename('oldtouch','newtouch') >>> os.listdir('/python') ['newtouch']

os.stat('path/filename')  獲取文件/目錄信息
1 2 >>> os.stat('newtouch') os.stat_result(st_mode=33188, st_ino=1048593, st_dev=51713, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1453442450, st_mtime=1453442450, st_ctime=1453442500)

os.sep      輸出操作系統特定的路徑分隔符,win下為"\\",Linux下為"/"
1 2 3 >>> os.sep '/' >>>

os.linesep 輸出當前平臺使用的行終止符,win下為"\t\n",Linux下為"\n"
1 2 >>> os.linesep '\n'

os.pathsep    輸出用於分割文件路徑的字元串
1 2 >>> os.pathsep ':'

os.name    輸出字元串指示當前使用平臺。win->'nt'; Linux->'posix'
1 2 >>> os.name 'posix'

os.system("pwd")  運行shell命令,直接顯示
1 2 3 >>> os.system('pwd') /python 0

os.environ

1 2 >>> os.environ environ({'_': '/usr/bin/python3', 'SSH_CONNECTION': 省略n個字元

os模塊其他語法:

 

1 2 3 4 5 6 7 8 9 10 11 12 os.path模塊主要用於文件的屬性獲取, os.path.abspath(path)  返回path規範化的 os.path.split(path)  將path分割成目錄和文件名二元組返回 os.path.dirname(path)  返回path的目錄。其實就是os.path.split(path)的第一個元素 os.path.basename(path)  返回path最後的文件名。如何path以/或\結尾,那麼就會返回空值。即os.path.split(path)的第二個元素 os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False 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.getatime(path)  返回path所指向的文件或者目錄的最後存取時間 os.path.getmtime(path)  返回path所指向的文件或者目錄的最後修改時間

 


 

2、sys模塊 用於提供對解釋器相關的操作

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 33 34 35 36 37 38 sys.argv   命令行參數List,第一個元素是程式本身路徑 sys.modules 返回系統導入的模塊欄位,key是模塊名,value是模塊 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.modules.keys() 返回所有已經導入的模塊名 sys.modules.values() 返回所有已經導入的模塊 sys.exc_info()     獲取當前正在處理的異常類,exc_type、exc_value、exc_traceback當前處理的異常詳細信息 sys.exit(n)        退出程式,正常退出時exit(0) sys.hexversion     獲取Python解釋程式的版本值,16進位格式如:0x020403F0 sys.version        獲取Python解釋程式的 sys.api_version    解釋器的C的API版本 sys.version_info ‘final’表示最終,也有’candidate’表示候選,serial表示版本級別,是否有後繼的發行 sys.displayhook(value)      如果value非空,這個函數會把他輸出到sys.stdout,並且將他保存進__builtin__._.指在python的互動式解釋器里,’_’ 代表上次你輸入得到的結果,hook是鉤子的意思,將上次的結果鉤過來 sys.getdefaultencoding()    返回當前你所用的預設的字元編碼格式 sys.getfilesystemencoding() 返回將Unicode文件名轉換成系統文件名的編碼的名字 sys.setdefaultencoding(name)用來設置當前預設的字元編碼,如果name和任何一個可用的編碼都不匹配,拋出 LookupError,這個函數只會被site模塊的sitecustomize使用,一旦別site模塊使用了,他會從sys模塊移除 sys.builtin_module_names    Python解釋器導入的模塊列表 sys.executable              Python解釋程式路徑 sys.getwindowsversion()     獲取Windows的版本 sys.copyright      記錄python版權相關的東西 sys.byteorder      本地位元組規則的指示器,big-endian平臺的值是’big’,little-endian平臺的值是’little’ sys.exc_clear()    用來清除當前線程所出現的當前的或最近的錯誤信息 sys.exec_prefix    返回平臺獨立的python文件安裝的位置 sys.stderr         錯誤輸出 sys.stdin          標準輸入 sys.stdout         標準輸出 sys.platform       返回操作系統平臺名稱 sys.path           返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變數的值 sys.maxunicode     最大的Unicode值 sys.maxint         最大的Int值 sys.version        獲取Python解釋程式的版本信息 sys.hexversion     獲取Python解釋程式的版本值,16進位格式如:0x020403F0

3.hashlib模塊 

Python的hashlib提供了常見的摘要演算法,如MD5,SHA1等等。

什麼是摘要演算法呢?摘要演算法又稱哈希演算法、散列演算法。它通過一個函數,把任意長度的數據轉換為一個長度固定的數據串(通常用16進位的字元串表示)用於加密相關的操作,代替了md5模塊和sha模塊,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 演算法

1)MD5演算法

1 2 3 4 5 >>> import hashlib >>> hash = hashlib.md5() >>> hash.update('liuyao199539'.encode('utf-8')) >>> hash.hexdigest() '69ce9b5f54ba01b6d31256596e3fbb5c'

1.首先從python直接導入hashlib模塊

2.調用hashlib里的md5()生成一個md5 hash對象

3.生成hash對象後,就可以用update方法對字元串進行md5加密的更新處理

4.繼續調用update方法會在前面加密的基礎上更新加密

5.在3.x幾的版本上update裡面需要加.encode('utf-8'),而2.x的版本不需要

2)sha1演算法

1 2 3 4 5 >>> import hashlib >>> sha_1 = hashlib.sha1() >>> sha_1.update('liuyao'.encode('utf-8')) >>> sha_1.hexdigest() 'dd34a806b733f6d02244f39bcc1af87819fcaa82'

3)sha256演算法

 

1 2 3 4 5 >>> import hashlib >>> sha_256 = hashlib.sha256() >>> sha_256.update('liuyao'.encode('utf-8')) >>> sha_256.hexdigest() '5ad988b8fa43131f33f4bb867207eac4a1fcf56ff529110e2d93f2cc7cfab038'

4)sha384演算法

 

1 2 3 4 5 >>> import hashlib >>> sha_384 = hashlib.sha384() >>> sha_384.update('liuyao'.encode('utf-8')) >>> sha_384.hexdigest() '03ca6dcd5f83276b96020f3227d8ebce4eebb85de716f37b38bd9ca3922520efc67db8efa34eba09bd01752b0313dba3'

5)sha512演算法

 

1 2
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • C++Primer第5版學習筆記(三) 第四/五章的重難點內容 你可以點擊這裡回顧第三章內容 因為第五章的內容比較少,因此和第四章的筆記內容合併。 第四章是和表達式有關的知識,表達式是C++的基礎設施,本章由三部分組成: 1.表達式概念基礎,包括表達式的基本概念,左值和右值的概念,優先順序結合律,求值
  • 其實不是真的創建了批量任務,而是用python創建一個文本文件,每行一個要下載的鏈接,然後打開迅雷,複製文本文件的內容,迅雷監測到剪切板變化,彈出下載全部鏈接的對話框~~ 實際情況是這樣的,因為用python分析網頁非常,比如下載某頁中的全部pdf鏈接 1 from __future__ impor
  • C-Free和VC++ 6.0是根據源文件擴展名來編譯的。在學習C語言時,應將IDE的預設擴展名設置為.c,或者先保存為.c文件再進行編譯,以避免造成不必要的困惑。
  • 官網地址 本文內容 簡介 Futures 阻塞 異常 Promises 工具 最近看了《七周七語言:理解多種編程泛型》,介紹了七種語言(四種編程泛型)的主要特性:基本語法,集合,並行/併發,其中就有 Scala。你不能指望這種書全面介紹,因為其中任何一門語言都夠寫一本書了~ 我比較關註並行/併發,但
  • 1 /* 2 類是屬於用戶自定義的數據類型, 3 並且該類型的數據具有一定的行為能力, 4 也就是類中說描述的方法。 5 通常來說, 6 一個類的定義包含兩部分的內容, 7 一是該類的屬性, 8 另一部分是它所擁有的方法。 9 以 "人類" 這個類來說, 10 每個人都有自己的姓名、年齡、出生日期、
  • 本文實例講述了PHP實現上傳文件並存進資料庫的方法。分享給大家供大家參考。具體如下: show_add.php文件如下: <?php if(!isset($_REQUEST[''id'']) or $_REQUEST[''id'']=="") die("error: id none"); $id =
  • PageControl位於Win32選項卡中,可以在控制項上右鍵點擊“New Page”,來實現靜態的頁面添加。 先說說幾個重要的屬性: ActivePage:當前活動的頁面(在設計模式中切換頁面會更改ActivePage屬性) MultiLine:選項卡以多行形式顯示。 Style:頁面樣式。 ts
  • 同事演示了一個.NET的的PNG異形視窗.挺漂亮.於是也想用Delphi顯擺一個. 關於Delphi用PNG做異形視窗的資料有不少.都是用GDIPlus或者TPNGImage組件載入PNG圖像做的. 好在Delphi包裝了微軟的IWICImagingFactory介面,這樣處理PNG的工作就交給操作
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...