228|0

59

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

《趣味微项目轻松学Python》-正则表达式以及实战 [复制链接]

14-22章主要介绍了这几个内容

  1. 使用正则表达式
  2. ASCII对文本字符编码
  3. 解析CSV
  4. 生成带有提示类型的交互版本

一、使用正则表达式

正则表达式是一种用于匹配和处理文本的强大工具,它通过定义一种特定的语法规则,可以用来搜索、替换、提取或验证字符串中的特定模式
书中举出的例子是对输入的单词,提取前缀和词干,如果使用普通的for循环也是可以查找,但是使用正则,可以更高效的匹配到想要的字符串

  1. def main():
  2. args = get_args()
  3. # 定义前缀列表,包括单个辅音和常见的辅音组合
  4. prefixes = list('bcdfghjklmnpqrstvwxyz') + (
  5. 'bl br ch cl cr dr fl fr gl gr pl pr sc '
  6. 'sh sk sl sm sn sp st sw th tr tw thw wh wr '
  7. 'sch scr shr sph spl spr squ str thr').split()
  8. # 对输入的单词进行词干提取,得到前缀和词干
  9. start, rest = stemmer(args.word)
  10. # 如果词干存在,生成并打印所有可能的押韵单词
  11. if rest:
  12. print('\n'.join(sorted([p + rest for p in prefixes if p != start])))
  13. else:
  14. # 如果无法提取词干,提示无法押韵
  15. print(f'Cannot rhyme "{args.word}"')
  16. def stemmer(word):
  17. word = word.lower()
  18. # 定义元音字母
  19. vowels = 'aeiou'
  20. # 定义辅音字母,通过排除元音字母得到
  21. consonants = ''.join(
  22. [c for c in string.ascii_lowercase if c not in vowels])
  23. # 定义正则表达式模式,用于匹配单词的前缀、元音和剩余部分
  24. pattern = (
  25. '([' + consonants + ']+)?' # 匹配一个或多个辅音,可选
  26. '([' + vowels + '])' # 匹配至少一个元音
  27. '(.)' # 匹配零个或多个任意字符
  28. )
  29. pattern = f'([{consonants}]+)?([{vowels}])(.)'
  30. # 使用正则表达式匹配单词
  31. match = re.match(pattern, word)
  32. if match:
  33. # 提取匹配的辅音部分(前缀)
  34. p1 = match.group(1) or ''
  35. # 提取匹配的元音部分
  36. p2 = match.group(2) or ''
  37. # 提取匹配的剩余部分
  38. p3 = match.group(3) or ''
  39. # 返回前缀和词干
  40. return (p1, p2 + p3)
  41. else:
  42. # 如果无法匹配,返回整个单词和空字符串
  43. return (word, '')

介绍一下python中正则表达式的用法

  1. # 导入正则表达式模块
  2. import re
  3. # 从字符串的开头尝试匹配正则表达式模式
  4. # 如果匹配成功,返回一个Match对象,如果匹配失败,返回 None
  5. match = re.match(pattern, word)
  6. # 提取匹配的结果
  7. # 如果正则表达式中使用了分组(即用 () 括起来的部分),可以通过 match.group(n) 提取第n个分组的内容
  8. match.group()

1_正则表达式
2_正则表达式简写类2

二、ASCII对文本字符编码

介绍了python中是如何处理字符编码的

1. ord()

用于字符和Unicode码点之间的转换

  1. print(ord('A')) # 输出:65
  2. print(ord('a')) # 输出:97
  3. print(ord('中')) # 输出:20013(中文字符的 Unicode 码点)

2. chr()

与ord()相反,用于将Unicode码点转换为字符

  1. print(chr(65)) # 输出:A
  2. print(chr(97)) # 输出:a
  3. print(chr(20013)) # 输出:中

3_ASCII对文本字符编码

3. re.sub()

用于在字符串中查找匹配正则表达式的部分,并将其替换为指定的内容,用于字符串的复杂替换操作

  1. import re
  2. # 替换所有数字为
  3. result = re.sub(r'\d', '', 'abc123xyz')
  4. print(result) # 输出:abcxyz
  5. # 替换所有空格为-
  6. result = re.sub(r'\s', '-', 'Hello World')
  7. print(result) # 输出:Hello-World

三、解析CSV

python也经常用于数据处理,所以和csv文件交互式很常见的内容,下面展示了如何简单的读取一个csv文件

  1. # 打开名csv文件,with open语句确保文件在使用后自动关闭,避免资源泄露
  2. with open('inputs/exercises.csv') as fh:
  3. # 读取文件的第一行,通常是CSV文件的表头,并使用rstrip()去除行末的换行符
  4. # 然后使用split(',')将表头按逗号分隔成一个列表,存储在headers变量中
  5. headers = fh.readline().rstrip().split(',')
  6. records = []
  7. for line in fh:
  8. # 对每一行数据,使用rstrip()去除行末的换行符,然后按逗号分隔成一个列表
  9. rec = dict(zip(headers, line.rstrip().split(',')))
  10. records.append(rec)

下面图中是书中展示了如何使用zip处理文件
4_zip如何处理文件

四、一些小技巧

书的最后编写了一个井字棋游戏,主要使用到了之前介绍了语法,通过一个实践的例子加深读者对python的使用
代码编写过程中还有一些小的语法知识点:

1. enumerate()代替list的索引和值

enumerate()是Python内置函数,用于在遍历列表(或其他可迭代对象)时同时获取元素的索引和值它避免了手动管理索引变量,使代码更简洁

  1. fruits = ['apple', 'banana', 'cherry']
  2. for index, value in enumerate(fruits):
  3. print(f"Index:{index}, Value:{value}")

2. TypedDict类

TypedDict是Python3.8引入的一个类型注解工具,用于定义字典的结构和类型,它可以帮助你在静态类型检查时确保字典的键和值符合预期的类型
TypedDict主要用于静态类型检查(如使用mypy),不会在运行时强制类型约束

  1. from typing import TypedDict
  2. class Person(TypedDict):
  3. name:str
  4. age:int
  5. person:Person = {
  6. 'name':'Alice',
  7. 'age':30
  8. }

3. mypyt分析类型错误

mypy是一个静态类型检查工具,用于在Python代码中检查类型注解的正确性,可以帮助你在开发阶段发现类型错误,提高代码的健壮性,它支持Python3.5及以上版本的类型注解功能

  1. def greet(name:str) -> str:
  2. return f"Hello, {name}"
  3. # 类型错误示例
  4. greet(42) # 这里传入了一个整数,不符合str类型
  5. # 执行指令
  6. mypy example.py

总结

  1. 本书中作者用了很多的国外的文化故事,为了加强读者的理解,但是由于文化背景的隔阂,所以作为中文读者,没办法理解的这么深,但是能大概从例子中看到python的使用方法,还是不错的。但是在后面的章节中,甚至语法可以理解,但是文章开头的故事需要更多理解一下。
  2. 作者虽然将书本分了章节,有时候章节会互相穿插,比如后面csv章节,还穿插了list(zip())语法的解释,我比较喜欢将相关的知识做归类,阅读这本书,就得自己归类了。但是相反的,穿插了各种语法的使用方法,可以加深理解
  3. 总体而言,这是一本python初学者入门时可以阅读的读物,通过例子,是可以了解到一些实际python的使用场景,而不是仅仅知道一些简单的语法
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖直播 | AI之眼——安森美图像传感器 报名中
直播时间:2025年4月25日(周五)上午10:00-11:30
直播主题:AI之眼——安森美图像传感器
报名观看直播、直播间提问、填写问卷均有机会获得精美礼品!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 11

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表