Python第八周作业
Python第八周作业
文章目录
- Python第八周作业
1.用正则表达式匹配所有以
test_
开头且以.py
结尾的文件名;
2.使用pickle
序列化对象并保存到文件,再反序列化读取;
3.使用argparse
模块编写命令行程序,接受--input
和--output
参数;
4.用正则表达式提取字符串"价格:¥199.99"
中的数字部分;
5.解释re.findall
和re.search
的区别,并举例说明;
1.用正则表达式匹配所有以test_
开头且以.py
结尾的文件名;
from pathlib import Path
import recurrent_path = Path(__file__).resolve().parentre_file = re.compile(r'^test_.*\.py$')# 通过循环方式获取文件
for file in current_path.iterdir():if file.is_file() and re_file.match(file.name):print(f"当前目录匹配文件的结果:{file.name}")# 遍历当前目录下的所有文件并存在列表中
re_files = [file.name for file in current_path.iterdir(
) if file.is_file() and re_file.match(file.name)]
print(f"当前目录匹配文件的结果:{re_files}")
2.使用pickle
序列化对象并保存到文件,再反序列化读取;
import pickle
import os
from pathlib import Path# file_name = Path('.')/'user_info.pkl'
file_name = Path(__file__).resolve().parent/'user_info.pkl'
data = {'name': "Hooper",'age': 28,'classes': ['Python', 'Linux', 'GoLang']
}# 序列化写入文件
def write_file(file_name):with open(file_name, 'wb') as file:pickle.dump(data, file)print(f"序列化保存文件完成.文件名: {file_name}")# 反序列化读取文件
def read_file(file_name):if os.path.exists(file_name):with open(file_name, 'rb') as file:read_data = pickle.load(file)print("反序列化读取文件完成.")print(read_data)else:print(f"{file_name}文件不存在.")write_file(file_name)read_file(file_name)
3.使用argparse
模块编写命令行程序,接受--input
和--output
参数;
import argparse
from pathlib import Pathfile_name = 'ex_argparse.py'
current_path = Path(__file__).resolve().parent# 创建ArgumentParser对象
parser = argparse.ArgumentParser(file_name, description="这是一个demo脚本,支持添加--input及--output参数")# 添加参数
parser.add_argument('--input', type=str, help='输入文件路径')
parser.add_argument('--output', type=str, help='输出文件路径')# 解析命令行参数
args = parser.parse_args()
print(args)# 针对传入的参数进行脚本的处理
if args.input:print(f"输入文件:{args.input}")
else:print(f"未添加输入文件路径.请使用'python3 {current_path}/{file_name} -h' 获取帮助信息.")# 打印帮助# parser.print_help()if args.output:print(f"输出文件:{args.output}")
else:print(f"未添加输出文件路径.请使用'python3 {current_path}/{file_name} -h' 获取帮助信息.")# 打印帮助# parser.print_help()
4.用正则表达式提取字符串"价格:¥199.99"
中的数字部分;
import re
text_data = "价格:¥199.99"re_data = re.findall(r"\d+(?:\.\d+)", text_data)
# (?:\.\d+)作为一个分组,匹配包含小数点及小数点后面的数字
print(f"数字部分:{re_data}")
# 输出结果: 数字部分:['199.99']
5.解释re.findall
和re.search
的区别,并举例说明;
re.findall()
匹配全文,返回所有匹配的结果
re.search()
匹配全文;返回空值(None)或者第一个匹配的对象(Object);
示例:
import re
eg_data = "高3学生肯定学习过高2学生跟高1学生学习的内容"
f_list = re.findall(r"高\d学", eg_data)
s_list = re.search(r"高\d学", eg_data)print(f"findall:{f_list};\nsearch:{s_list}")# 输出结果:
# findall:['高3学', '高2学', '高1学'];
# search:<re.Match object; span=(0, 3), match='高3学'>