字符串和文本处理
字符串方法
字符串判断
方法 |
描述 |
isalnum() |
是否全是数字 |
isalpha() |
是否全是字母 |
isdigit() |
是否全是数字 |
islower() |
是否全是小写 |
isupper() |
是否全是大写 |
isspace() |
是否包含空格 |
istitle() |
是否是标题化的(以大写字母开头) |
startswith() |
是否以指定字符串开头 |
字符串大小写
方法 |
描述 |
capitalize() |
将字符串的第一个字符转换为大写 |
lower() |
将字符串中所有大写字符转换为小写 |
upper() |
将字符串中所有小写字符转换为大写 |
swapcase() |
将字符串中所有大写字符转换为小写,将所有小写字符转换为大写 |
title() |
将字符串中每个单词的首字母转换为大写 |
casefold() |
将字符串中所有大写字符转换为小写 |
字符串对齐
方法 |
描述 |
center() |
返回一个原字符串居中,并使用空格填充至长度 width 的新字符串 |
ljust() |
返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串 |
rjust() |
返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串 |
zfill() |
返回指定长度的字符串,原字符串右对齐,前面填充0 |
expandtabs() |
把字符串中的 tab 符号(\t)转换为空格,如不指定参数,默认的空格数是 tabsize=8 |
strip() |
移除字符串头尾指定的字符(默认为空格或换行符)或字符序列 |
lstrip() |
移除字符串左边指定的字符(默认为空格或换行符)或字符序列 |
rstrip() |
移除字符串右边指定的字符(默认为空格或换行符)或字符序列 |
字符串查找
方法 |
描述 |
find() |
检测 str 是否包含在字符串中,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1 |
rfind() |
类似于 find() 函数,不过是从右边开始查找 |
index() |
检测 str 是否包含在字符串中,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则抛出异常 |
rindex() |
类似于 index(),不过是从右边开始 |
count() |
返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数 |
startswith() |
检查字符串是否是以指定子字符串开头,如果是则返回 True,否则返回 False。如果参数 beg 和 end 指定值,则在指定范围内检查 |
endswith() |
检查字符串是否以指定子字符串 ending 结束,如果是则返回 True,否则返回 False。如果参数 beg 和 end 指定值,则在指定范围内检查 |
replace() |
把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次 |
拆分和查找
方法 |
描述 |
partition() |
把字符串 string 分成一个 3 元素的元组 (head, sep, tail),如果 string 中不包含 sep,则返回元组 (string, '', '') |
rpartition() |
类似于 partition() 函数,不过是从右边开始查找 |
split() |
通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则仅分隔 num 个子字符串 |
rsplit() |
类似于 split() 方法,不过是从右边开始切片 |
splitlines() |
按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表 |
join() |
以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 |
翻译和抓换
maketrans()
: 创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
translate()
: 根据参数table给出的表,转换字符串的字符,要过滤掉的字符放到deletechars参数中。
table = str.maketrans('aeiou', '12345')
print('this is string example....wow!!!'.translate(table, 'xm'))
正则表达式
正则表达式是一种特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列,相匹配。
- 元字符是一些预定义的特殊字符,用来表示一些特定的含义,如匹配数字、空白字符等。
元字符 |
描述 |
. |
匹配除换行符以外的任意字符 |
^ |
匹配字符串的开始 |
$ |
匹配字符串的结束 |
* |
匹配前一个字符出现0次或者无限次,即可有可无 |
+ |
匹配前一个字符出现1次或者无限次,即至少有1次 |
? |
匹配前一个字符出现1次或者0次,即要么有1次,要么没有 |
|
匹配前一个字符出现m次 |
|
匹配前一个字符出现从m到n次 |
| |
匹配 |
(...) |
将括号中字符作为一个分组 |
- 预定义字符集是一组预定义好的一些字符,用来表示一些特定的含义,如匹配数字、空白字符等。
预定义字符集 |
描述 |
\d |
匹配数字,等价于[0-9] |
\D |
匹配非数字,等价于[^0-9] |
\s |
匹配空白字符,等价于[\t\n\r\f\v] |
\S |
匹配非空白字符,等价于[^\t\n\r\f\v] |
\w |
匹配非特殊字符,即a-z、A-Z、0-9、_、汉字 |
\W |
匹配特殊字符,即非字母、非数字、非汉字 |
- 边界匹配符用来匹配字符串的边界,如匹配空格、换行、tab键等。
边界匹配符 |
描述 |
\b |
匹配一个单词的边界 |
\B |
匹配非单词边界 |
\A |
匹配字符串开始 |
\Z |
匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串 |
- 重复匹配符用来匹配字符重复出现的次数,如匹配一个字符出现3次等。
重复匹配符 |
描述 |
* |
匹配前一个字符出现0次或者无限次,即可有可无 |
+ |
匹配前一个字符出现1次或者无限次,即至少有1次 |
? |
匹配前一个字符出现1次或者0次,即要么有1次,要么没有 |
|
匹配前一个字符出现m次 |
|
匹配前一个字符出现至少m次 |
|
匹配前一个字符出现从m到n次 |
re模块
re模块是python中用于正则表达式操作的模块,包含了正则表达式的所有功能。
re.match()
: 从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
re.search()
: 扫描整个字符串并返回第一个成功的匹配。
re.findall()
: 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
re.split()
: 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型。
re.finditer()
: 与findall()函数类似,扫描整个字符串,并返回一个迭代器。
import re
print(re.match('www', 'www.runoob.com').span())
print(re.match('com', 'www.runoob.com'))
print(re.search('www', 'www.runoob.com').span())
print(re.search('com', 'www.runoob.com').span())
print(re.findall(r'\d+', 'runoob 123 google 456'))
print(re.split(r'\W+', 'runoob, runoob, runoob.'))
print(re.split(r'(\W+)', 'runoob, runoob, runoob.'))
it = re.finditer(r'\d+', '12a32bc43jf3')
for match in it:
print(match.group())
文件和数据交换
文件
文件操作
- 文件打开
open()
打开或创建文件对象
- 文件读写
read()
读取文件内容
write()
写入文件内容
readline()
读取一行内容
writelines()
写入多行内容
flush()
刷新文件内部缓冲区
- 文件关闭
close()
关闭文件,释放资源
内存文件操作
StringIO
:在内存中读写str
BytesIO
:在内存中读写二进制数据
from io import StringIO, BytesIO
f = StringIO()
f.write('hello')
f.write(' ')
f.write('world!')
print(f.getvalue())
f = BytesIO()
f.write('中文'.encode('utf-8'))
print(f.getvalue())
文件的压缩和解压缩
gzip
:gzip格式的压缩和解压缩
bz2
:bzip2格式的压缩和解压缩
import gzip
import bz2
with gzip.open('test.txt.gz', 'wb') as f:
f.write('hello world!'.encode('utf-8'))
with gzip.open('test.txt.gz', 'rb') as f:
print(f.read().decode('utf-8'))
with bz2.open('test.txt.bz2', 'wb') as f:
f.write('hello world!'.encode('utf-8'))
with bz2.open('test.txt.bz2', 'rb') as f:
print(f.read().decode('utf-8'))
CSV文件操作
import csv
with open('test.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(['id', 'name', 'age'])
writer.writerow(['10001', 'Mike', 20])
writer.writerow(['10002', 'Bob', 22])
writer.writerow(['10003', 'Jordan', 21])
with open('test.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
print(row)
with open('test.csv', 'w', newline='') as f:
fieldnames = ['id', 'name', 'age']
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'id': '10001', 'name': 'Mike', 'age': 20})
writer.writerow({'id': '10002', 'name': 'Bob', 'age': 22})
writer.writerow({'id': '10003', 'name': 'Jordan', 'age': 21})
with open('test.csv', 'r') as f:
reader = csv.DictReader(f)
headers = reader.fieldnames
print(headers)
for row in reader:
print(row['id'], row['name'], row['age'])
csv.register_dialect('mydialect', delimiter='|', quoting=csv.QUOTE_ALL)
with open('test.csv', 'w', newline='') as f:
writer = csv.writer(f, dialect='mydialect')
writer.writerow(['id', 'name', 'age'])
writer.writerow(['10001', 'Mike', 20])
writer.writerow(['10002', 'Bob', 22])
writer.writerow(['10003', 'Jordan', 21])
with open('test.csv', 'r') as f:
reader = csv.reader(f, dialect='mydialect')
for row in reader:
print(row)
对象序列化
对象序列化是指将对象转换为字节序列的过程,反之则是对象反序列化。
import pickle
d = dict(name='Bob', age=20, score=88)
print(pickle.dumps(d))
f = open('dump.txt', 'wb')
pickle.dump(d, f)
f.close()
f = open('dump.txt', 'rb')
d = pickle.load(f)
f.close()
print(d)
json
:将对象序列化为json字符串
json.dumps()
:将对象序列化为json字符串
json.dump()
:将对象序列化为json字符串并写入文件
json.loads()
:将json字符串反序列化为对象
json.load()
:将json字符串反序列化为对象并写入文件
import json
d = dict(name='Bob', age=20, score=88)
print(json.dumps(d))
json_str = '{"name": "Bob", "age": 20, "score": 88}'
print(json.loads(json_str))
数据库访问
sqlite3
sqlite3是python自带的轻量级数据库,可以直接使用。
import sqlite3
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')
cursor.execute('insert into user (id, name) values (\'1\', \'Michael\')')
print(cursor.rowcount)
cursor.close()
conn.commit()
conn.close()
MySQL
MySQL是一个关系型数据库管理系统,可以使用python的mysql-connector
模块进行访问。
import mysql.connector
conn = mysql.connector.connect(user='root', password='password', database='test')
cursor = conn.cursor()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步