Python 之 模塊
阿新 • • 發佈:2018-03-09
就是 都是 存在 表達式 駝峰 input 而且 list 進行 1.7
2.2
3.
1. 模塊
1.1 概念
- 每一個以擴展名
.py
結尾的Python
源代碼文件都是一個模塊; - 模塊名同樣也是一個標識符,需要符合標識符的命名規則;
- 在模塊中定義的全局變量, 函數, 類都是提供給外界直接使用的工具;
1.2 模塊的兩種導入方式
import
導入from...import
導入
# 示例: import 導入 import 模塊名1 import 模塊名2 # 備註: 如果模塊的名字太長,可以使用as指定模塊的名稱,以方便在代碼中的使用 import 模塊名1 as 模塊別名(模塊別名應該符合大駝峰命名法) # 示例二: from ... import # 如果希望從某一個模塊中,導入部分工具,就可以使用 from ... import 的方式 from 模塊名1 import 工具名 # 導入之後,不需要通過 模塊名. # 可以直接使用模塊提供的工具(即全局變量,函數, 類) # 如果兩個模塊,存在同名的函數,那麽後導入模塊的函數,會覆蓋掉先導入的函數;
1.3 開發原則
__name__
屬性:測試模塊的代碼只在測試情況下被運行,而在被導入時,不會被執行!__name__
記錄著一個字符串:- 如果是被其他文件導入的,
__name__
就是模塊名; - 如果是當前執行的程序,
__name__
是__main__
;
- 如果是被其他文件導入的,
# 示例: 代碼格式 # 1. 導入模塊 # 2. 定義全局變量 # 3. 定義類 # 4. 定義函數 # 在代碼的最下方 def main(): # 編寫測試代碼 pass # 根據 __name__ 的值,判斷是否執行下方代碼 if __name__ = "__main__": main()
1.4 包(Package)
- 包就是一個包含多個模塊的特殊目錄;
- 目錄下,有一個特殊的文件
__init__.py
; - 包的命名方式和變量名一致;
- 使用
import 包名
可以一次性導入包中所有的模塊; __init__.py
中需要指定對外界提供的模塊列表;
# 示例:
# 從 當前目錄 導入 模塊列表
from . import 模塊1
from . import 模塊2
1.5 發布模塊
# 具體步驟(三步): # 1) 創建 setup.py from distutils.core import setup setup(name="xxx_message", # 包名 version="1.0", # 版本 description="消息模塊", # 描述信息 long_description="詳細的描述信息", # 完整描述信息 author="noodles", # 作者 author_email="[email protected]", # 作者郵箱 url="www.google.com", # 主頁 py_modulse=["模塊1", "模塊2"]) # 2) 構建模塊 $ python3 setup.py build # 3) 生成發布壓縮包 $ python3 setup.py sdist
1.6 安裝模塊
模塊(包).__file__
: 可以查看模塊(包)的完整路徑;
# 安裝模塊
$ tar -zxvf 模塊壓縮包
$ sudo python3 setup.py install
# 卸載模塊,直接從安裝目錄下刪除
$ cd /usr/local/lib/python3.5/dist-packages/
$ sudo rm -r 包名
1.7 pip
安裝第三方模塊
pip
是一個現代的,通用的Python
包管理工具;- 提供了對
Python
包的查找,下載,安裝和卸載等功能;
# 將 pygame 模塊安裝到 python2.x 環境
$ sudo pip install pygame
$ sudo pip uninstall pygame
# 將 pygame 模塊安裝到 Python 3.x 環境
$ sudo pip3 install pygame
$ sudo pip3 uninstall pygame
# mac 下安裝 iPython
$ sudo pip install ipython # 針對 python2.x
$ sudo pip3 install ipython # 針對 python3.x
2. 文件操作
2.1 操作文件的函數/方法
open
函數,負責打開文件,並且返回文件操作對象;read
方法,將文件內容讀取到內存;write
方法,將指定內容寫入文件;close
方法,關閉文件;- 以上三個方法均需要通過文件對象來調用;
2.2 read
方法--讀取文件
open
函數的第一個參數就是要打開的文件名(文件名區分大小寫)- 如果文件存在,返回文件操作對象;
- 如果文件不存在,會拋出異常;
read
方法可以一次性讀入並返回文件的所有內容;close
方法負責關閉文件;- 如果忘記關閉文件,會造成系統資源消耗,而且會影響到後續對文件的訪問;
# 示例:
# 打開
file = open("a.txt")
# 讀取
text = file.read()
print(text)
# 關閉
file.close()
2.3 文件指針
- 文件指針標記從哪個位置開始讀取數據;
- 第一次打開文件時,通常文件指針會指向文件的開始位置;
- 當執行了
read
方法後,文件指針會移動到讀取內容的末尾;
2.4 打開文件的方式
open
函數默認以只讀方式打開文件,並且返回文件對象
f = open("文件名", "訪問方式")
# 訪問方式說明:
# r: 以只讀方式打開文件;文件的指針將會放在文件的開頭,這是默認模式;
# w: 以只寫方式打開文件,如果文件存在會被覆蓋;如果文件不存在,創建新文件;
# a: 以追加方式打開文件,如果該文件已經存在,文件指針將會放在文件的末尾; 如果文件不存在,創建新的文件進行寫入;
# r+: 以讀寫方式打開文件;文件的指針將會放在文件的開頭;如果文件不存在,拋出異常;
# w+: 以讀寫方式打開文件;如果文件存在會被覆蓋;如果文件不存在,創建新文件;
# a+: 以讀寫方式打開文件;如果該文件已經存在,文件指針將會放在文件的末尾; 如果文件不存在,創建新的文件進行寫入;
# 備註:頻繁的移動文件指針,會影響文件的讀寫效率;開發中,更多的時候會以只讀,只寫的方式來操作文件;
# a(append)
2.5 按行讀取文件內容
readline
方法可以一次讀取一行內容;- 方法執行後,會把文件指針移動到下一行,準備再次讀取;
read
方法默認會把文件的所有內容一次性讀取到內存。如果文件太大,對內存的占用會非常嚴重;
# 打開文件
file = open("a.txt")
while True:
# 讀取一行內容
text = file.readline()
# 判斷是否讀到內容
if not text:
break
# 沒讀取一行的末尾已經有一個 '\n'
print(text, end="")
# 關閉文件
file.close()
# 示例: 文件復制
# 1. 打開文件
file_read = open("a.txt")
file_write = open("b.txt", "w")
# 2. 讀 寫
while True:
# 讀取到一行內容
text = file_read.readline()
# 判斷是否讀取到內容
if not text:
break
file_write.write(text)
# 3. 關閉
file_read.close()
file_write.close()
2.6 文件/目錄的常用管理操作
- 需要導入
os
模塊 os.rename(源文件名, 目標文件名)
: 重命名;os.remove(文件名)
: 刪除文件;os.listdir(目錄名)
: 目錄列表;os.mkdir(目錄名)
: 創建目錄;os.rmdir(目錄名)
: 刪除目錄;os.getcwd()
: 獲取當前目錄;os.chdir(目標目錄)
: 修改工作目錄;os.path.isdir(文件路徑)
: 判斷是否是文件;
3. eval()
函數
eval()
函數,可以將字符串當成有效的表達式來求值,並返回計算結果eval("1 + 1")
, 輸出結果: 2
# 示例: 計算器
# 提示用戶輸入一個加減乘除混合運算表達式
input_str = input("請輸入一個算術題: ")
print(eval(input_str))
# 備註: 開發時,千萬不要使用 eval() 函數,直接轉換 input 的結果
# 原因:類似於"註入攻擊"
# 當用戶輸入: __import__('os').system('ls')
# 等價於:
import os
os.system("終端命令")
- 模塊相關(Python)
Python 之 模塊