Ⅶ-Python标准库

发布于:2024-05-20 ⋅ 阅读:(159) ⋅ 点赞:(0)

目录

        1.Python标准库

        2.字符串

        2.1.循环打印字符串

        2.2.string之常见字符串操作

        案例:string中有个 Formatter类:

        案例:如何获取4位数的验证码

        2.3.str之文本序列类型

        案例:检查一个字符串中某个字符出现的次数

        3.日期操作

        4.文件操作

        导入主类:

        入门案例:

        pathlib操作目录:

        pathlib操作文件:

        5.思维导图 


1.Python标准库

Python标准库非常庞大,所提供的组件涉及范围十分广泛,正如以下内容目录所显示的。

这个库包含了多个内置模块 (以 C 编写),Python 程序员必须依靠它们来实现系统级功能,例如文件 I/O,此外还有大量以 Python 编写的模块,提供了日常编程中许多问题的标准解决方案。其中有些模块经过专门设计,通过将特定平台功能抽象化为平台中立的 API 来鼓励和加强 Python 程序的可移植性。

Windows 版本的 Python 安装程序通常包含整个标准库,往往还包含许多额外组件。对于类 Unix 操作系统,Python 通常会分成一系列的软件包,因此可能需要使用操作系统所提供的包管理工具来获取部分或全部可选组件。

2.字符串

2.1.循环打印字符串

循环打印字符串中的字符

temp: str = "1234567"
sum = 0
for i in temp:  # 字符串可以遍历
    #   print(i)
    sum += int(i)


print(sum)

2.2.string之常见字符串操作

常量 说明
string.ascii_letters 获取26个大小写字母
string.ascii_lowercase 小写字母 abcdefghijklmnopqrstuvwxyz
string.ascii_uppercase 大写字母 ABCDEFGHIJKLMNOPQRSTUVWXYZ
string.digits 字符串 0123456789,十进制
string.hexdigits 字符串 0123456789abcdefABCDEF,十六进制
string.octdigits 字符串 01234567,八进制

更多string --- 常见的字符串操作请见官网资料。

string模块中定义的常量为:

# 1.获取26个大小写字母
print(string.ascii_letters)

# 2.获取26个大写字母
print(string.ascii_uppercase)

# 3.获取26个小写字母
print(string.ascii_lowercase)

# 4.获取0-9的数字,十进制
print(string.digits)

# 5.获取字符串 '0123456789abcdefABCDEF’。十六进制。
print(string.hexdigits)

# 6.获取字符串 '01234567’。八进制。
print(string.octdigits)

案例:string中有个 Formatter类:

from string import  Formatter

# 格式化字符串的函数 str.format(),它增强了字符串格式化的功能。
formatter = Formatter()    
# 基本语法是通过 {} 和 : 来代替以前的 % 。
str = formatter.format('{}+{}={}', 1, 2, 3)
print(str)

案例:如何获取4位数的验证码

import random
import string

yzm = ''

# ascii_letters:获取大小写字母
# digits:10进制数码
st = string.ascii_letters+string.digits

for i in range(4):
    t = random.randint(0,len(st)-1)    #随机器(开始位置,结束位置)
    yzm += st[t]

print(yzm)

2.3.str之文本序列类型

在 Python 中处理文本数据是使用 str 对象,也称为 字符串。 字符串是由 Unicode 码位构成的不可变序列。 字符串字面值有多种不同的写法:

  • 单引号: 允许包含有 "双" 引号

  • 双引号: 允许嵌入 '单' 引号

  • 三重引号: '''三重单引号''', """三重双引号"""

使用三重引号的字符串可以跨越多行 —— 其中所有的空白字符都将包含在该字符串字面值中。

字符串的方法:

方法 说明
str.capitalize() 返回原字符串的副本,其首个字符大写,其余为小写。
str.casefold() 返回原字符串消除大小写的副本。 消除大小写的字符串可用于忽略大小写的匹配。
str.count(sub[, start[, end]]) 返回子字符串 sub 在 [start, end] 范围内非重叠出现的次数。
str.endswith(suffix[, start[, end]]) 如果字符串以指定的 suffix 结束返回 True,否则返回 False
str.find(sub[, start[, end]]) 返回子字符串 subs[start:end] 切片内被找到的最小索引。
str.index(sub[, start[, end]]) 类似于find(),但在找不到子字符串时会引发 ValueError
str.join(iterable) 返回一个由 iterable 中的字符串拼接而成的字符串。
str.strip([chars]) 返回原字符串的副本,移除其中的前导和末尾字符。

更多字符串的方法,请见官网资料。

# 1.index:类似于java中的indexof,如果没有找到则报错
try:
    print("hello python".index('h',2))
except ValueError:
    print("报错了")

# 2.find:与index类似
print("hello python".find('py'))

# 3.split:分割
nums = "1a2a3"
print(nums.split('a'))

# 4.strip:类似与java中的trim()方法
text = " a s "
print(text.strip(' '))

# 5.capitalize:首个字母大写
text = 'hello python'
print(text.capitalize())

# 6.join:序列中的元素以指定的字符添加
print(",".join('123456'))

# 7.endswith:判断文件是否与指定后缀结尾相同,相同为true,否则为false
print('123.png'.endswith('.png'))

# 8.startwith: 如果字符串以指定的 prefix 开始则返回 True,否则返回 False。
print('123.png'.startswith("123"))

# 9.大写、小写及首字母大写转换处理
print("HELLO".lower())
print("hello".upper())
print("hello".capitalize())

案例:检查一个字符串中某个字符出现的次数

# 检查一个字符串中某个字符出现的次数

temp = '123uiaudoa8uo1u3ouauosud9lkmlm2l34ml12asf'

# 方式一:find或index
count = 0
i = 0
while i < len(temp):
    p = temp.find('au', i)
    if p == -1:
        break
    else:
        count += 1
        i = p + 1

print(count)

# 方式二 replace
print('次数:', (len(temp) - len(temp.replace('au', ''))) / len('au'))

# 方式三 count
print(temp.count('au'))

3.日期操作

datetime 模块提供用于处理日期和时间的类。

在支持日期时间数学运算的同时,实现的关注点更着重于如何能够更有效地解析其属性用于格式化输出和数据操作。

from datetime import datetime

# 创建datetime对象
d = datetime(2024, 5, 13)
print(d)
now = datetime.now()
print(now)

# datetime属性
print("年", now.year)
print("月", now.month)
print("日", now.day)
print("时", now.hour)
print("分", now.minute)
print("秒", now.second)
print("毫秒", now.microsecond)

# 日期转换字符串
now_str = now.strftime(('%Y年%m月%d日'))
print(now_str)

# 字符串转换日期
now_date = datetime.strptime(now_str, '%Y年%m月%d日')
print(now_date)

4.文件操作

pathlib --- 面向对象的文件系统路径。该模块提供表示文件系统路径的类,其语义适用于不同的操作系统。路径类被分为提供纯计算操作而没有 I/O 的纯路径,以及从纯路径继承而来但提供 I/O 操作的具体路径。

shutil --- 高阶文件操作。该模块提供了一系列对文件和文件集合的高阶操作。特别是提供了一些支持文件拷贝和删除的函数。

os --- 多种操作系统接口。本模块提供了一种使用与操作系统相关的功能的便捷式途径。 如果你只是想读写一个文件,请参阅 open(),如果你想操作文件路径,请参阅 os.path 模块,如果你想读取通过命令行给出的所有文件中的所有行,请参阅 fileinput 模块。

为了创建临时文件和目录,请参阅 tempfile 模块

pathlib方法介绍:

方法 说明
Path.cwd() 返回一个新的表示当前目录的路径对象
Path.home() 返回一个表示当前用户家目录的新路径对象
Path.iterdir() 当路径指向一个目录时,产生该路径下的对象的路径
Path.exists() 此路径是否指向一个已存在的文件或目录

更多方法请查看官网文档。

pathlib基本使用:

导入主类:

from pathlib import Path
from pathlib import  *

pu = PurePath()
print(type(pu))

# 在不同的操作系统下执行,返回不同的实例
# 在windows平台返回:WindowsPath
# 在Lunix平台返回:PureWindowsPath
p = Path('d:\\图片')
print(type(p))

入门案例:

# 1.获取当前工作目录
print("当前目录=",Path.cwd())
# 2.获取用户目录
print("当前用户的主目录=",Path.home())
# 3.获取当前文件路径
print("当前文件路径=",Path(__file__))

pathlib操作目录:

# 创建Path实例
p = Path("d:\\图片")
print('是否是目录=',p.is_dir())
print('是否是文件=',p.is_file())
print('是否是绝对路径'p.is_file())
print('是否存在=',p.exists())


p = Path('d:\\图片\\ss')
if not p.exists():
    # 创建目录
    p.mkdir()
else:
    # 删除目录
    p.rmdir()

pathlib操作文件:

from pathlib import  Path

p = Path('d:\\图片\\cs\\32.txt')
# 文件名
print('文件名=',p.name)
# 主文件名
print('主文件名=',p.stem)
# 扩展名
print('扩展名=',p.suffix)
# 获取父级目录
print('父目录=',p.parent)
print('父目录=')
for pr in p.parents:
    print(pr)
# 获取第二级
print('父目录2=',p.parents[1])
# 获取最后一级
print('父目录2=',p.parents[-1])
# 获取锚,目录前面的部分 C:\ 或者 Lunix:/
print('获取锚=',p.anchor)

获取当前目录及当前目录下的文件:

from pathlib import  Path

# 获取所有文件及目录
p = Path("D:\\图片")

for f in  p.iterdir():
    if f.is_dir():
        print(f,'目录')
    else:
        print(f)

获取目录下的指定文件:

from pathlib import  Path

# 获取指定文件
for f in p.glob("*.java"):
    print(f)

获取当前目录下的所有目录和文件:

from pathlib import  Path

def each(dir):
    p = Path(dir)
    for f in p.iterdir():
        if f.is_file():
            print(f)
        else:
            print(f)
            each(f)


# 获取目录下的指定文件
each("d:\\图片")

p = Path("d:\\图片")
#递归获取所有子目录下的文件
print(list(p.rglob("*.txt")))

对读取和写入进行了简单的封装:

from pathlib import  Path

p = Path('d:\\图片\\hello.txt')
#判断是否是文件
if p.is_file():
    print(p)
else:
    #如果文件不存在,就创建
    p.touch()

# 写入内容并设置编码格式
p.write_text("hello Python",encoding="utf-8")
# 读取内容并设置编码格式
print(p.read_text(encoding="utf-8"))

# 移动文件
t = Path("d:\\图片\\cs\\hello.txt")
p.replace(t)

# 更改文件名
t.rename("d:\\图片\\hi.txt")
print(t)

# 修改后缀名
s = t.with_suffix(".jpg")
t.replace(str(s.absolute()))

将所有的文件复制一个备份文件:

# 将所有的文件复制一个备份文件:
p = Path("d:\\图片\\cs")
# 获取当前目录下的子目录
for f in p.iterdir():
    #判断是否是文件
    if f.is_file():
        # 实行文件重命名
        f2 = Path(f.with_stem(f.stem + "_bk"))
        #创建新的文件
        f2.touch()
        #实现新文件的读流写流
        f2.write_bytes(f.read_bytes())

5.思维导图 

----------------------------------------------------------------------------------------♥-------------------------------------------------------------------------------------

往期Python内容:

Ⅰ-Python入门与基本语法

Ⅱ-Python运算符(进阶语法)

Ⅲ-Python函数的使用

Ⅳ-Python函数进阶

Ⅴ-Python面向对象

Ⅵ-Python模块使用