一、字符串
1.入门示例
循环打印字符串中的字符
temp: str="12345678" h = 0 for i in temp: print(i) h+=int(i) print(h)
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)
案例:如何获取4位数的验证码
yzm = '' st = string.ascii_letters for i in range(4): temp = random.randint(0, len(st) - 1) yzm += st[temp] print(yzm)
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]]) | 返回子字符串 sub 在 s[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('12345')) # 7) endswith 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 = '123uiaudoa8uo1u3ouaosud9lkmlm2l34ml12asf' index = temp.find('a') count = 0 while index != -1: count += 1 index = temp.find('a', index+1) print("出现次数:", count) # 方式二: print("出现次数:", len(temp) - len(temp.replace('a', ''))) # 方式三: count:返回子字符串 sub 在 [start, end] 范围内非重叠出现的次数 text = 'hello python' print("出现次数:", str.count(text, 'h'))
二、日期操作
datetime 模块提供用于处理日期和时间的类。
在支持日期时间数学运算的同时,实现的关注点更着重于如何能够更有效地解析其属性用于格式化输出和数据操作。
from datetime import datetime # 日期格式化处理 d = datetime(2023, 5, 2) print(d) # 获取当前日期 now = datetime.now() print(now) # 获取日期中的年月日时分秒 print(now.year) print(now.month) print(now.day) print(now.hour) print(now.minute) print(now.second) print(now.microsecond)
三、文件操作
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
-
入门案例:
# 1) 获取当前工作目录 print(Path.cwd()) # 2) 获取用户目录 print(Path.home()) # 3) 获取当前文件路径 print(Path(__file__))
pathlib
操作目录:
# 获取任意字符串路径(目录) p = Path("E:\\images\\图片") print(p) # 是不是目录 print(p.is_dir()) # 是不是文件 print(p.is_file()) # 是不是绝对路径 print(p.is_absolute()) # 创建目录 p.mkdir() # 删除目录 p.rmdir()
pathlib
操作文件:
p = Path("E:\\images\\1.png") # 获取目录名称或者文件名称 print(p.name) # 获取文件名或者目录名 print(p.stem) # 获取文件后缀 print(str(p.resolve()).endswith(".png")) print(p.suffix) # 获取父级目录 print(p.parent) print(p.parents) for i in p.parents: print(i) # 获取第二级 print(p.parents[1]) # 获取最后一级 print(list(p.parents)[-1]) # 获取锚,目录前面的部分 C:\ 或者 / print(p.anchor) # 新建文件 p = Path("E:\\images\\readme.txt") p.touch()
获取当前目录及当前目录下的文件:
p = Path("E:\\images")
# 获取当前目录及当前目录下的文件
for i in p.iterdir():
print(i)
获取当前目录下的所有目录和文件:
def each(dir): p = Path(dir) for i in p.iterdir(): if i.is_file(): print(i) else: each(i) each("E:\\images")
获取目录下的指定文件:
# 获取目录下的指定文件 p = Path("E:\\images") print(list(p.glob("*.png"))) # 递归获取所有子目录下的文件 print(list(p.rglob("*.png")))
对读取和写入进行了简单的封装:
p = Path("E:\\images\\readme.txt") # 新建文件 p.touch() # 写入内容并设置编码格式 p.write_text("你好,python",encoding="UTF-8") # 读取内容并设置编码格式 print(p7.read_text(encoding="UTF-8"))
移动文件:
p = Path("E:\\images\\readme.txt") # 新建文件 p.touch() # 通过replace返回一个新的指向目标路径的Path实例 p.replace("E:\\images\\xx.txt")
重命名文件:
p = Path("E:\\images\\xx.txt") # 返回一个带有修改后stem的新路径,只修改了对象名称,并没有影响本地存储文件的名称 filename=p.with_stem("read") # 通过replace返回一个新的指向目标路径的Path实例 p.replace(str(filename.absolute()))
修改后缀名:
p = Path("E:\\images\\read.txt")
# 修改文件的后缀并返回一个修改后的新路径
suffix = p.with_suffix(".jpg")
p.replace(str(suffix.absolute()))
将所有的文件复制一个备份文件:
p = Path("E:\\images\\") # 获取当前目录下的子目录 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())