一、模块
-
Python的模块是用于组织、封装和重用代码的文件,一个Python文件就是一个模块。
-
一个模块中可以包含变量、函数、类和其他Python语句,它允许将代码逻辑划分为独立的单元,并提供了一种组织代码的方式,使代码更加模块化和易于维护。
-
Python的模块可以分为三类:
内建模块
、第三方模块
、自定义模块
。
1.1 模块的导入
- Python可通过模块导入引用其它模块中的数据,提供了
import
和from-import
两种方式。
import导入
- Python中使用
import
关键字来导入模块,导入模块后,在当前文件中作为一个对象使用,可以通过.
来引用模块中定义的函数、变量或类等。
# 导入内建模块 math
import math
# 可以使用其中的 sqrt() 来计算平方根
result = math.sqrt(25)
print(result)
- 如果被导入的模块名比较长,在使用时会不太方便,也可以使用
as
为模块指定一个别名,一旦指定了别名,原模块名就不能使用了。
# 导入内建模块 math
import math as m
# 可以使用其中的 sqrt() 来计算平方根
result = m.sqrt(25)
print(result)
- 还可以使用
from module_name import object_name
语法,从模块中导入特定的对象,这样可以直接使用对象名,无需使用模块名前缀。
# 导入内建模块 math
from math import sqrt
# 可以使用其中的 sqrt() 来计算平方根
result = sqrt(25)
print(result)
1.2 内建模块
- Python标准库中包含了大量的内建模块,这些模块提供了各种功能,如数学计算、字符串处理、日期时间操作、文件操作等。通过导入相应的内建模块,可以使用这些功能,避免重复编写代码。
import random
# 生成 1 到 100 之间的随机整数
random_number = random.randint(1, 100)
print(random_number)
import datetime
# 获取当前日期和时间
current_datetime = datetime.datetime.now()
# 格式化日期输出
formatted_date = current_datetime.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_date)
1.3 自定义模块
- 由开发者编写,用于封装代码、组织功能,以便在其他Python程序中复用。自定义模块是一个Python文件,可以包含函数、类、变量等。
示例:创建一个my_module.py文件
def greet(name):
return f"Hello, {{name}}!"
def add(a,b):
return a + b
在其他文件中使用:
import my_module
print(my_module.greet("Alice"))
print(my_module.add(5, 4))
1.4 第三方模块
- 第三方模块和库通过包管理工具(pip)安装,如:PyMySQL、Pytest、Flask、SQLAchemy等。
1.5 dir()函数
-
dir()
是Python内置函数,用于获取指定对象的所有属性和方法的列表。 - 格式:
dir(obj)
import math
print(dir(math))
二、包
-
在Python中,包(package)是用于组织和管理模块(module)的一种层级结构。
-
包是一个特殊的目录,其中包含了一个名为
__init__.py
的文件,用于标记这个目录是一个包。 -
包可以包含其他子包和模块,形成多级层次结构,方便组织和复用代码。
2.1 package用途
-
组织代码:包可以将相关的模块组织在一起,使得代码结构更加清晰,有助于团队协作和维护;
-
避免命名冲突:Python的模块是全局的,当不同的模块中定义了相同名称的函数或变量时,可能会引起命名冲突。使用包可以将模块放在不同的包中,避免冲突;
-
模块复用:包可以作为一个单元来导入和使用,使得代码在不同项目中的复用更加容易;
-
隐藏内部实现:包可以将一些内容实现隐藏起来,只暴露外部接口,提供更好的封装线。
2.2 package导入
-
从包中导入模块时,导入方式非常灵活。
-
当前有包组织结构如下:
Project
|
|--- mp
| |
| |--- __init__.py
| |--- mm.py
| | |
| | |--- show()
| |--- nn.py
| | |
| | |--- info()
|--- main.py
- 使用 import 直接导入包中指定模块:
#
import mp.mm
mp.mm.show()
import mp.nn as nn
nn.info()
- 使用 from-import 导入包内指定模块或包内指定模块内的成员:
# 导入包内指定模块
from mp import mm
mm.show()
# 导入包内指定模块中的成员
from mp.mm import *
show()
2.3 __init__.py
-
__init__.py
文件是包的初始化文件,该文件是区别包与文件夹的关键。 -
当使用
from-import
方式导入时,可以通过在文件中添加魔法属性__all__
属性来设置包中哪些模块可以被导入。
# 在 __init__.py 中添加下面代码
__all__ = ["mm"]
# main.py中的代码
from mp import *
# 此时只能使用 __all__ 中指定的mm模块,nn 模块不能使用
mm.show()
三、Random模块
-
random
是Python内置的用于生成随机数的模块。它提供了多种随机数生成函数,用于各种不同的随机数需求。
-
random.random()
:生成一个[0,1)范围内的随机浮点数;
import random
print(random.random())
-
random.randint(a,b)
:生成一个[a,b]范围内的随机整数;
import random
print(random.randint(2, 23))
-
random.uniform(a,b)
:生成一个[a,b]范围内的随机浮点数;
import random
print(random.uniform(2, 23))
-
random.choice(seq)
:从序列seq
中随机选择一个元素。seq
是自定义的序列;
import random
fruits = ["香蕉", "草莓", "芒果"]
random_fruit = random.choice(fruits)
print(random_fruit)
-
random.shuffle(lst)
:随机打乱列表lst
的元素顺序。
import random
nums = [1, 3, 5, 7, 9]
random.shuffle(nums)
print(nums)
四、Sys模块
- Sys是Python的内置标准库模块,提供了访问与Python解释器相关的变量和函数的功能。它的主要用途是与系统交互、解释器配置、命令行参数处理、标准输入输出、异常处理等。
4.1 sys常用属性
-
sys.argv
:获取命令行参数列表,包括脚本名称和传递给脚本的其他参数;
import sys
# 第一个元素是脚本名称,后续元素是命令行参数
script_name = sys.argv[0]
arguments = sys.argv[1:]
print("脚本名称:", script_name)
print("命令行参数", arguments)
-
sys.version
:获取当前Python解释器的版本信息;
import sys
print("python解释器版本:", sys.version)
-
sys.version_info
:获取当前Python解释器的版本信息,以元组形式表示详细的版本号信息;
import sys
print("python解释器版本信息:", sys.version_info)
-
sys.platform
:获取当前运行的操作系统平台名称;
import sys
print("当前操作系统平台:", sys.platform)
-
sys.modules
:获取已导入的模块信息,返回一个字典;
import sys
for module_name, module in sys.modules.items():
print(f"模块名:{module_name},模块对象:{module}")
-
sys.path
:获取模块搜索路径列表,用于指定Python解释器搜索模块的路径。
import sys
print(sys.path)
4.2 sys常用方法
-
sys.getdefaultencoding()
:获取编码方式;
import sys
print(sys.getdefaultencoding())
-
sys.exit()
:运行时退出。
import sys
print("Python解释器版本信息:", sys.version_info)
# 运行之后退出,不会运行后面的代码
sys.exit()
print(sys.getdefaultencoding())
五、OS模块
-
Python的内置库os(Operating System Interface)提供了与操作系统交互的函数,允许与操作系统进行各种操作,如文件和目录操作、环境变量访问、进程管理等。
-
使用os库,可以编写跨平台的代码,因为它提供了对操作系统底层功能的抽象,而不用担心特定操作系统的细节。
5.1 路径操作
-
os.getcwd()
:获取当前目录的路径;
import os
directory = os.getcwd()
print("当前目录:", directory)
-
os.chdir()
:用于改变当前的工作目录;
- 工作目录是指当前正在执行的脚步所在的目录,通过使用
os.chdir()
方法,可以在脚本执行过程中切换到不同的目录。
import os
# 当前工作目录
print("当前工作目录:", os.getcwd())
# 切换到指定目录
os.chdir("/path/to/directory")
# 切换后的工作目录
print("切换后的工作目录:", os.getcwd())
-
os.path.abspath(path)
:获取绝对路径。path
是要获取绝对路径的路径;
import os
# 获取绝对路径
absolute_path = os.path.abspath('relative/path/to/file.txt')
print("Absolute Path:", absolute_path)
-
os.path.basename(path)
:返回指定路径的基本名称(不包含父目录路径);
import os
# 获取基本名称
base_name = os.path.basename('/path/to/file.txt')
print("Base Name:", base_name)
-
os.path.dirname(path)
:返回指定路径的父目录路径;
import os
# 获取父目录路径
parent_directory = os.path.dirname('/path/to/file.txt')
print("父目录为:", parent_directory)
-
os.path.split(path)
:用于将一个路径拆分为目录部分和文件名部分;
import os
path = '/home/user/file.txt'
result = os.path.split(path)
print(result)
-
os.path.join(path)
:用于连接多个路径部分。它将多个路径片段组合在一起,形成一个新的路径字符串;
import os
path1 = '\home\user'
path2 = 'file.txt'
result = os.path.join(path1, path2)
print(result)
-
os.path.exists(path)
:判断路径是否存在(可以是文件或目录);
import os
# 判断路径是否存在
path_to_check = '/path/to/file.txt'
if os.path.exists(path_to_check):
print("路径存在")
else:
print("路径不存在")
-
os.path.isdir(path)
:判断是否目录;
import os
# 判断路径是否是目录
directory_path = '/path/to/directory'
if os.path.isdir(directory_path):
print("它是一个目录")
else:
print("它不是一个目录或路径不存在")
-
os.path.isfile(path)
:判断是否文件;
import os
# 判断路径是否是文件
file_path = '/path/to/file.txt'
if os.path.isfile(file_path):
print("它是一个文件")
else:
print("它不是文件或路径不存在.")
-
os.path.getsize(path)
:获取文件大小。
import os
print(os.path.getsize("main.py"))
5.2 目录和文件操作
-
os.listdir()
:列出当前目录内容;
import os
# 获取目录内容
directory_path = '/path/to/directory'
content = os.listdir(directory_path)
print("Directory Content:", content)
-
os.mkdir()
:创建一个新的目录;
import os
# 创建新目录
new_directory = '/path/to/new_directory'
os.mkdir(new_directory)
-
os.makedirs()
:递归创建多级目录;
# 创建多级目录
nested_directory = '/path/to/nested/directory'
os.makedirs(nested_directory)
-
os.rmdir()
:删除空目录;
import os
# 删除目录
directory_to_delete = '/path/to/directory_to_delete'
os.rmdir(directory_to_delete)
5.
os.rename()
:重命名目录;
import os
# 重命名目录
old_directory_name = '/path/to/old_directory'
new_directory_name = '/path/to/new_directory'
os.rename(old_directory_name, new_directory_name)
-
os.remove()
:删除文件(只能删除文件,不能删除目录);
import os
# 删除指定的文件
file_to_delete = '/path/to/file.txt'
os.remove(file_to_delete)
5.3 其他操作
-
os.name
:获取系统名称,在Windows上,该值为nt
;在Linux、macOS上,该值为posix
;
import os
# 获取当前平台名称
platform_name = os.name
print("Platform Name:", platform_name)
-
os.chmod(path,mode)
:更改文件权限模式。path
是要更改权限的文件路径,mode
是权限模式,通常用八进制表示,如0o755
。
import os
# 更改文件权限模式为-rwxr-xr-x
file_path = '/path/to/file.txt'
os.chmod(file_path, 0o755)
-
os.sep
:用于表示操作系统特定的路径分隔符。
- 在Windows操作系统上,路径分隔符是反斜杠
\
;而在POSIX系统(如Linux、macOS等)上,路径分隔符是正斜杠/
。
import os
# 获取路径分隔符
path_separator = os.sep
print("Path Separator:", path_separator)