描述
编写一个 Python 程序,读取data.in文件中的数据(utf-8编码),将其中的姓名、身份证、手机号码部分信息替换成
*`进行脱敏处理,结果输出到data.out文件中。
格式
输入
读取文件data.in。
输出
结果存至data.out。
样例
data.in文件内容
姓名:周紫薇
居住地:北京
身份证号:110101199003073597
手机号:19838855767
姓名:广雨旋
居住地:上海
身份证号:310101199003074538
手机号:18334444671
姓名:国天欣
居住地:广州
身份证号:440103199003071398
手机号:17131292567
姓名:高白桃
居住地:深圳
身份证号:440303199003078179
手机号:15725375874
data.out文件内容
姓名:薇**
居住地:北京
身份证号:110101********3597
手机号:198****5767
姓名:旋**
居住地:上海
身份证号:310101********4538
手机号:183****4671
姓名:欣**
略...
代码:
import re
with open('data.in', 'r', encoding='utf-8') as f:
data = f.read()
data = re.sub(r'姓名:(.{2})(.{1})(.*)', r'姓名:\3\2\1', data)
data = re.sub(r'姓名:(.{1})(.{1})(.*)', r'姓名:\1**', data)
data = re.sub(r'身份证号:(.{6})(.{8})(.*)', r'身份证号:\1********\3', data)
data = re.sub(r'手机号:(.{3})(.{4})(.*)', r'手机号:\1****\3', data)
with open('data.out', 'w', encoding='utf-8') as f:
f.write(data)
print(data)
代码解析:
import re
:导入正则表达式模块re
,用于处理文本中的匹配和替换操作。with open('data.in', 'r', encoding='utf-8') as f:
:打开名为'data.in'的文件,以只读模式读取('r'
),使用UTF-8编码(encoding='utf-8'
),并将文件对象赋值给变量f
。使用with
语句可以确保在读取完毕后自动关闭文件,无需显式调用f.close()
。data = f.read()
:将文件内容全部读取为一个字符串,并将其赋值给变量data
。data = re.sub(r'姓名:(.{2})(.{1})(.*)', r'姓名:\3\2\1', data)
:使用正则表达式函数re.sub()
进行替换。匹配以"姓名:"开头,后面跟着两个任意字符、一个任意字符、以及任意数量字符的部分。(.{2})
表示任意两个字符的分组,(.{1})
表示任意一个字符的分组,(.*)
表示任意数量字符的分组。替换为以"姓名:"开头,后面跟着第三个分组、第二个分组、第一个分组的顺序。替换后的结果将重新赋值给变量data
。data = re.sub(r'姓名:(.{1})(.{1})(.*)', r'姓名:\1**', data)
:使用正则表达式函数re.sub()
进行替换。匹配以"姓名:"开头,后面跟着一个任意字符、一个任意字符、以及任意数量字符的部分。替换为以"姓名:"开头,后面跟着第一个分组以及两个星号。替换后的结果将重新赋值给变量data
。data = re.sub(r'身份证号:(.{6})(.{8})(.*)', r'身份证号:\1********\3', data)
:使用正则表达式函数re.sub()
进行替换。匹配以"身份证号:"开头,后面跟着六个任意字符、八个任意字符、以及任意数量字符的部分。替换为以"身份证号:"开头,后面跟着第一个分组、8个星号、第三个分组的顺序。替换后的结果将重新赋值给变量data
。data = re.sub(r'手机号:(.{3})(.{4})(.*)', r'手机号:\1****\3', data)
:使用正则表达式函数re.sub()
进行替换。匹配以"手机号:"开头,后面跟着三个任意字符、四个任意字符、以及任意数量字符的部分。替换为以"手机号:"开头,后面跟着第一个分组、四个星号、第三个分组的顺序。替换后的结果将重新赋值给变量data
。with open('data.out', 'w', encoding='utf-8') as f:
:打开名为'data.out'的文件,以写入模式('w'
),使用UTF-8编码(encoding='utf-8'
),并将文件对象赋值给变量f
。f.write(data)
:将修改后的字符串data
写入到文件data.out
中。print(data)
:打印修改后的字符串data
。