案例驱动式Python学习笔记【第三篇】居民身份证信息提取
驱动案例
居民身份证是每位居民的唯一身份标识,18位的居民身份证号的信息包含省、市、出生日期和性别等信息,
那么本节将介绍如何按需提取相应的信息。居民身份证是每位居民的唯一身份标识,18位的居民身份证号
的信息包含省、市、出生日期和性别等信息,那么本节将介绍如何按需提取相应的信息。
字符串
字符串切片
切片是截取目标对象中一部分的操作,语法格式如下:[起始:结束:步长]。
切片步长默认为1。注意,切片选取的区间属于左闭右开型,切下的子串包含起始位,但不包含结束位。
假设string的值为: ”python”
string[0:4:2] # 结果为pt
示例:
card = '420111199808120045'
# 切片
# 正向切片
birth = card[6:14] # 出生日期
# 反向切片
gender = card[-2] # 性别print("出生日期:" + birth)if int(gender)%2 == 0:genderOut = "女"
else:genderOut = "男"
print("性别:" + genderOut)
字符串替换
字符串的 replace() 方法可使用新的子串替换目标字符串中原有的子串,该方法的语法格式如下:
- old – 表示原有子串。
- new – 表示新的子串。
- count – 用于设定替换次数。
>>word= “我是小明,我今年28岁”
>>word.replace(‘我’, ‘他’)
‘他是小明,他今年28岁’
字符串分割
字符串的 split() 方法可以使用分隔符把字符串分割成序列,该方法的语法格式如下:
- sep – 分隔符,默认为空格。
- maxsplit – 用于设定分割次数。
>>word= “1 2 3 4 5”
>>word.split()
[‘1’, ‘2’, ‘3’, ‘4’, ‘5’]
去除字符串两侧空格
字符串对象的strip()方法一般用于去除字符串两侧的空格,该方法的语法格式如下:
- chars – 要去除的字符,默认为空格。
>>> word= “ Strip ”
>>> word.strip() //去除空格
‘Strip’>>> word= “**Strip**”
>>> word.strip(“*”) //去除*号
‘Strip’
字符串格式化输出
Python字符串可通过占位符、format() 方法和f-strings三种方式实现格式化输出。
占位符%
Python将一个带有格式符的字符串作为模板,使用该格式符为真实值预留位置,并说明真实值应该呈现的格式。
>>> name = "小柯"
>>> "你好,我叫%s" % name。
你好,我叫小柯。
一个字符串中可以同时包含多个占位符。
>>> name = "小柯"
>>> age = 20
>>> "你好,我叫%s,今年我%d岁了。" % (name, age)
你好!我叫小柯,今年我20岁了。
不同的占位符为不同类型的变量预留位置,常见的占位符如下表所示。
format()方法
format()方法也可以将字符串进行格式化输出,使用该方法无需再关注变量的类型。format()方法的基本使用格式如下:
>>> name = "小周"
>>> age = 19
>>> "你好!我的名字是{},今年我{}岁了。".format(name, age)
你好!我的名字是小周,今年我19岁了。
format()方法还可以对数字进行格式化,包括保留n位小数、数字补齐和显示百分比。
- 保留2位小数
>>> pi = 3.1415
>>> "{:.2f}".format(pi)
3.14
- 数字补齐
>>> num = 1
>>> "{:0>3d}".format(num)
001
- 显示百分比
>>> num = 0.1
>>> "{:.0%}".format(num)
10%
f-strings方法
f-strings在格式上以f或F引领字符串,字符串中使用{}标明被格式化的变量。(Python 3.6以上版本)
>>> address = '湖北 '
>>> f'欢迎来到{address}。'
欢迎来到湖北。
使用f-strings还可以将多个变量进行格式化输出。
>>> name = '陈聪'
>>> age = 19
>>> gender = '男'
>>> f'我的名字是{name},今年{age}岁了,我的性别是:{gender}。'
我的名字是陈聪,今年19岁了,我的性别是:男。
列表
列表是Python中最灵活的有序序列,它可以存储任意类型的元素。开发人员可以对列表中的元素进行添加、删除、修改等操作。
列表的创建
使用中括号创建列表
使用中括号“[]”创建列表时,只需要在 “[]” 中使用逗号分隔每个元素即可。
使用list()函数创建列表
使用list()函数创建列表时,需要给该函数传入一个可迭代类型的数据。
多学一招
可直接使用for循环的对象称为可迭代对象。
可以使用isinstance()函数判断一个对象是否为可迭代对象。
from collections import Iterable
print(isinstance([], Iterable)) #Ture
列表的访问
使用索引方式访问列表元素
使用索引可以获取列表中的指定元素。
list_demo01 = ["Java", "C#", "Python", "PHP"]
print(list_demo01[2]) # 访问列表中索引为2的元素
print(list_demo01[-1]) # 访问列表中索引为-1的元素
使用切片方式访问列表元素
使用切片可以截取列表中的部分元素,得到一个新列表。
li_one = ['p', 'y', 't', 'h', 'o', 'n']
print(li_one[2:]) # 获取列表中索引为2至末尾的元素
print(li_one[:3]) # 获取列表中索引为0至索引值为3的元素
print(li_one[:]) # 获取列表中的所有元素
列表的遍历
列表是一个可迭代对象,它可以通过for循环遍历元素。
list_one = ['小周', '小陈', '小柯', '小许']
for i in list_one:print(f"嗨,{i}!今日促销,赶快来抢购吧!")
列表的排序
stor()方法
sort()方法能够对列表元素排序,该方法的语法格式如下:
- key – 表示指定的排序规则。
- reverse – 表示控制列表元素排序的方式。
- False 升序
- True 降序
sorted()方法
sorted()方法可以按升序方式排列列表元素,该方法的返回值是升序排列后的新列表。
li_one = [4, 3, 2, 1]
li_two = sorted(li_one)
print(li_one) # 原列表
print(li_two) # 排序后列表
//输出为[4,3,2,1] [1,2,3,4]
reverse()方法
reverse()方法用于将列表中的元素倒序排列,即把原列表中的元素从右至左依次排列存放。
li_one = ['a', 'b', 'c', 'd']
li_one.reverse()
print(li_one) //输出为['a','c','b','a']
案例代码
card = '420111199808120045'# 2、字符串方法# (1)简要介绍方法的使用# (2)replace方法
# 遮盖身份证号的出生日期
card_hide = card.replace(card[6:14],'*'*8)
print(card_hide)cardStr = '420111199808120045,420105197905230034,420107198504140023,42010320010726007X'# (3)split方法
# 列表
week = ['Mon','Tus','Wed','Thur','Fri','Sat','Sun']
print(week[0])
week[1] = 2
print(week)# 将身份证字符串分割成身份证列表
card_list = cardStr.split(',')
print(card_list)for i in range(4):card = card_list[i]birth = card[6:14]gender = card[-2]print("出生日期:" + birth)if int(gender)%2 == 0:genderOut = "女" else:genderOut = "男"print("性别:" + genderOut)# (4)join方法
card_list = cardStr.split(',')
print(card_list)for i in range(4):card = card_list[i]birth = card[6:14]gender = card[-2]year = birth[0:4]month = birth[4:6]day = birth[-2:]birthList = [year,month,day]birthNew = '-'.join(birthList)print("出生日期:" + birthNew)if int(gender)%2 == 0:genderOut = "女" else:genderOut = "男"print("性别:" + genderOut)
ardStr = '420111199808120045,420105197905230034,420107198504140023,42010320010726007X'
card_list = cardStr.split(',')for i in range(4):card = card_list[i]birth = card[6:14]gender = card[-2]year = birth[0:4]month = birth[4:6]day = birth[-2:]birthList = [year,month,day]birthNew = '-'.join(birthList)if int(gender)%2 == 0:genderOut = "女" else:genderOut = "男"print('身份证号:%s,出生日期:%s,性别:%s'%(card,birthNew,genderOut))# 3、打印输出
# (1)%# (2)format
print('身份证号:{0},出生日期:{1},性别:{2}'.format(card,birthNew,genderOut))
总结
本节课主要补充介绍了字符串的切片、替换和分割、字符串的格式化输出(%、format)、列表等。
案例驱动式Python学习笔记【第三篇】居民身份证信息提取相关推荐
- 案例驱动式Python学习笔记【第一篇】便捷水果店
前言 后续的此系列博文用于记录案例式Python学习笔记记录,供本人和感兴趣的小伙伴一起学习!!人生苦短,我学Python! 驱动案例 便捷水果店:请为水果店开发一个收银的小程序,已知水果单价和购买重 ...
- 案例驱动式Python学习笔记【第六篇】电子宠物
驱动案例 设计多只电子宠物,它们具有名字,性别,能力,体重等属性,可以完成吃饭.运动.显示状态的动作. 类与对象 通过类(模板)可以生产多个具有相同属性和方法(行为)的对象,对象是类的实例化 clas ...
- Python 学习笔记 第三篇 Python实现网易云评论网页爬虫+词云展示 (Pycharm+Mysql)
初始条件,具体可见我的其他文章. 1.安装Python.Python 学习笔记 第一篇 Python的安装与配置 2.安装Pycharm,并导入第三方包.Python 学习笔记 第二篇 Python ...
- python通讯录运用的知识点_案例驱动式Python学习--通讯录存取
驱动案例 通讯录:要求打印出企业全部十名员工通讯录.(要求有文件相关操作) 内置函数 自定义函数 函数指被封装起来的.实现某种功能的一段代码.Python安装包.标准库中自带的函数统称为内置函数,用户 ...
- RCNN学习笔记——第三篇: 实现FRCNN网络训练、评价与预测(附全部源码)
RCNN学习笔记--第三篇: 实现FRCNN网络训练.评价与预测(附全部源码) 本文是个人根据B站大佬Bubbliiiing的FRCNN系列视频同步完成FRCNN训练,记录心得和遇见的问题. 关于RC ...
- Python学习笔记(三) Python基础
(二)python基础 python基础 自然语言与编程语言有所不同 ,自然语言可以在不同的情景下有不同的含义或解释 , 但这是编程语言是坚决杜绝的 . 编程语言应有的性能要求有:一致性 . 无二义性 ...
- 流畅的python学习笔记(三):数据结构(3:文本和字节序列)
文本和字节序列 大纲 1. 字符问题 2. 字节概要 2.1 结构体和内存视图 3. 基本的编解码器 4. 了解编解码问题 4.1 处理UnicodeEncodeError 4.2 处理Unicode ...
- 流畅的python学习笔记(三):数据结构(1)
文章目录 概述 序列 列表推导和生成器表达式 列表推导和可读性 列表推导同filter和map的比较 笛卡尔积 生成器表达式 元组不仅仅是不可变的列表 把元组用作记录 元组拆包 嵌套元组拆包 具名元组 ...
- python学习笔记(三)—— 序列类型及方法(列表、元组、字符串)
所谓序列,指的是一块可以存放多个值的连续内存空间,可以通过每个值所在的编号(索引)去访问他们 目录 列表(可变序列) 元组(不可变序列) 字符串(不可变) 转义 字符串拼接 列表(可变序列) 列表 方 ...
最新文章
- js校验复选框(多选按钮)是否被选中的方法
- iOS-获取当前时间的年、月、日、时、分、秒
- 运行Python程序的2种方式
- 支付宝:“答答星球”小程序上线20天累计参与人数超2亿
- install openni2 on ubuntu
- MySQL-在字段上使用函数不会走索引的原因是什么?
- 串口与并口有什么区别?
- NetBIOS协议和NBNS协议
- 前端开发工程师就业时应该选择大公司还是小公司?这是我听过最靠谱的答案!
- 中国未来可能面临的第四次失业浪潮
- openCamera的 hal 端流程
- JTAG/C2 接口定义
- JVM 年轻代和年老代 大小设置
- L2+ 概念要火!英伟达和英特尔都释放了什么信号?| CES 2019
- 学术期刊的 LaTeX整理合集(持续更新中)
- Google将Linux客户端研发的主力放到中国
- 2021宿迁所有高中高考成绩查询,宿迁市“赫赫有名”的4所高中,高考成绩说话,不愧是211后援团...
- 电子数据证据的证据能力及证明力研究
- 计算机教室设备安全管理制度,计算机教室和多媒体教室安全管理制度
- (林大oj1276)