Python常用模块(一)

一、模块

  • Python的模块是用于组织、封装和重用代码的文件,一个Python文件就是一个模块。

  • 一个模块中可以包含变量、函数、类和其他Python语句,它允许将代码逻辑划分为独立的单元,并提供了一种组织代码的方式,使代码更加模块化和易于维护。

  • Python的模块可以分为三类:内建模块第三方模块自定义模块

1.1 模块的导入

  • Python可通过模块导入引用其它模块中的数据,提供了importfrom-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用途

  1. 组织代码:包可以将相关的模块组织在一起,使得代码结构更加清晰,有助于团队协作和维护;

  2. 避免命名冲突:Python的模块是全局的,当不同的模块中定义了相同名称的函数或变量时,可能会引起命名冲突。使用包可以将模块放在不同的包中,避免冲突;

  3. 模块复用:包可以作为一个单元来导入和使用,使得代码在不同项目中的复用更加容易;

  4. 隐藏内部实现:包可以将一些内容实现隐藏起来,只暴露外部接口,提供更好的封装线。

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内置的用于生成随机数的模块。它提供了多种随机数生成函数,用于各种不同的随机数需求。
  1. random.random():生成一个[0,1)范围内的随机浮点数;
import random

print(random.random())

  1. random.randint(a,b):生成一个[a,b]范围内的随机整数;
import random

print(random.randint(2, 23))

  1. random.uniform(a,b):生成一个[a,b]范围内的随机浮点数;
import random

print(random.uniform(2, 23))

  1. random.choice(seq):从序列seq中随机选择一个元素。seq是自定义的序列;
import random

fruits = ["香蕉", "草莓", "芒果"]
random_fruit = random.choice(fruits)
print(random_fruit)

  1. random.shuffle(lst):随机打乱列表lst的元素顺序。
import random

nums = [1, 3, 5, 7, 9]
random.shuffle(nums)
print(nums)

四、Sys模块

  • Sys是Python的内置标准库模块,提供了访问与Python解释器相关的变量和函数的功能。它的主要用途是与系统交互、解释器配置、命令行参数处理、标准输入输出、异常处理等。

4.1 sys常用属性

  1. sys.argv:获取命令行参数列表,包括脚本名称和传递给脚本的其他参数;
import sys

# 第一个元素是脚本名称,后续元素是命令行参数
script_name = sys.argv[0]
arguments = sys.argv[1:]

print("脚本名称:", script_name)
print("命令行参数", arguments)

  1. sys.version:获取当前Python解释器的版本信息;
import sys
print("python解释器版本:", sys.version)

  1. sys.version_info:获取当前Python解释器的版本信息,以元组形式表示详细的版本号信息;
import sys
print("python解释器版本信息:", sys.version_info)

  1. sys.platform:获取当前运行的操作系统平台名称;
import sys
print("当前操作系统平台:", sys.platform)

  1. sys.modules:获取已导入的模块信息,返回一个字典;
import sys
for module_name, module in sys.modules.items():
    print(f"模块名:{module_name},模块对象:{module}")

  1. sys.path:获取模块搜索路径列表,用于指定Python解释器搜索模块的路径。
import sys
print(sys.path)

4.2 sys常用方法

  1. sys.getdefaultencoding():获取编码方式;
import sys
print(sys.getdefaultencoding())

  1. sys.exit():运行时退出。
import sys
print("Python解释器版本信息:", sys.version_info)
# 运行之后退出,不会运行后面的代码
sys.exit()
print(sys.getdefaultencoding())

五、OS模块

  • Python的内置库os(Operating System Interface)提供了与操作系统交互的函数,允许与操作系统进行各种操作,如文件和目录操作、环境变量访问、进程管理等。

  • 使用os库,可以编写跨平台的代码,因为它提供了对操作系统底层功能的抽象,而不用担心特定操作系统的细节。

5.1 路径操作

  1. os.getcwd():获取当前目录的路径;
import os
directory = os.getcwd()
print("当前目录:", directory)

  1. os.chdir():用于改变当前的工作目录;
  • 工作目录是指当前正在执行的脚步所在的目录,通过使用os.chdir()方法,可以在脚本执行过程中切换到不同的目录。
import os
# 当前工作目录
print("当前工作目录:", os.getcwd())

# 切换到指定目录
os.chdir("/path/to/directory")

# 切换后的工作目录
print("切换后的工作目录:", os.getcwd())

  1. os.path.abspath(path):获取绝对路径。path是要获取绝对路径的路径;
import os
# 获取绝对路径
absolute_path = os.path.abspath('relative/path/to/file.txt')
print("Absolute Path:", absolute_path)

  1. os.path.basename(path):返回指定路径的基本名称(不包含父目录路径);
import os

# 获取基本名称
base_name = os.path.basename('/path/to/file.txt')
print("Base Name:", base_name)

  1. os.path.dirname(path):返回指定路径的父目录路径;
import os

# 获取父目录路径
parent_directory = os.path.dirname('/path/to/file.txt')
print("父目录为:", parent_directory)

  1. os.path.split(path):用于将一个路径拆分为目录部分和文件名部分;
import os

path = '/home/user/file.txt'
result = os.path.split(path)
print(result)

  1. os.path.join(path):用于连接多个路径部分。它将多个路径片段组合在一起,形成一个新的路径字符串;
import os

path1 = '\home\user'
path2 = 'file.txt'
result = os.path.join(path1, path2)
print(result)

  1. os.path.exists(path):判断路径是否存在(可以是文件或目录);
import os

# 判断路径是否存在
path_to_check = '/path/to/file.txt'
if os.path.exists(path_to_check):
    print("路径存在")
else:
    print("路径不存在")

  1. os.path.isdir(path):判断是否目录;
import os

# 判断路径是否是目录
directory_path = '/path/to/directory'
if os.path.isdir(directory_path):
    print("它是一个目录")
else:
    print("它不是一个目录或路径不存在")

  1. os.path.isfile(path):判断是否文件;
import os

# 判断路径是否是文件
file_path = '/path/to/file.txt'
if os.path.isfile(file_path):
    print("它是一个文件")
else:
    print("它不是文件或路径不存在.")

  1. os.path.getsize(path):获取文件大小。
import os
print(os.path.getsize("main.py"))

5.2 目录和文件操作

  1. os.listdir():列出当前目录内容;
import os

# 获取目录内容
directory_path = '/path/to/directory'
content = os.listdir(directory_path)
print("Directory Content:", content)

  1. os.mkdir():创建一个新的目录;
import os

# 创建新目录
new_directory = '/path/to/new_directory'
os.mkdir(new_directory)

  1. os.makedirs():递归创建多级目录;
# 创建多级目录
nested_directory = '/path/to/nested/directory'
os.makedirs(nested_directory)

  1. 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)

  1. os.remove():删除文件(只能删除文件,不能删除目录);
import os

# 删除指定的文件
file_to_delete = '/path/to/file.txt'
os.remove(file_to_delete)

5.3 其他操作

  1. os.name:获取系统名称,在Windows上,该值为nt;在Linux、macOS上,该值为posix
import os

# 获取当前平台名称
platform_name = os.name
print("Platform Name:", platform_name)

  1. os.chmod(path,mode):更改文件权限模式。path是要更改权限的文件路径,mode是权限模式,通常用八进制表示,如0o755
import os

# 更改文件权限模式为-rwxr-xr-x
file_path = '/path/to/file.txt'
os.chmod(file_path, 0o755)


  1. os.sep:用于表示操作系统特定的路径分隔符。
  • 在Windows操作系统上,路径分隔符是反斜杠\;而在POSIX系统(如Linux、macOS等)上,路径分隔符是正斜杠/
import os

# 获取路径分隔符
path_separator = os.sep
print("Path Separator:", path_separator)