一、txt文件
题目:
假设我们有一份文件“data.txt”(编码格式UTF-8),文件中包含了很多个人隐私信息。现在需要一份去除其中敏感信息的版本,将文件中所有手机号的4-7位和身份证号的7-14位用*替换,然后追加到原文件的最后(新起一行),请自己划分功能由不同的函数来完成。
示例:
如果读入文件内容为:张三 居住地:武汉 身份证号:420111199909091234 手机号:13013013130
输出结果是:
张三 居住地:武汉 身份证号:420111********1234
手机号:130****3130
文件内容:
with open('data.txt', 'r', encoding='utf-8') as fr:
data = fr.readlines()
print(data)
id = []
phonenum = []
people = []
for i in range(0,len(data),4):
people.append(data[i:i+4])
for i in range(len(people)):
for j in range(len(people[i])):
if j == 2:
people[i][j] = people[i][j][:11] + '*'*8 + people[i][j][19:]
if j == 3:
people[i][j] = people[i][j][:7] + '*'*4 + people[i][j][11:]
with open('data.txt','a+',encoding='utf-8') as f:
f.writelines('\n')
for i in people:
f.writelines(i)
结果:
二、csv文件
题目:现在有UTF-8格式编码的名为 “score1.csv”的文件,里面存放着某班学生的Python课程成绩,共有学号、平时成绩、阶段测试、实报报告,机考成绩五列。请根据平时成绩10%,阶段测试30%,实验报告20%,机考成绩占40%的比例计算考核成绩(取整数),并分学号、考核成绩两列,按照考核成绩由高到低的顺序写入另一文件“score2.txt”中。同时在屏幕上输出班级学生总人数,按考核成绩计90以上、80~89、70~79、60~69、60分以下各成绩档的人数和班级总平均分(取整数)。要求不能使用第三方库,自己划分功能由不同的函数来完成。
屏幕输出示例:
文件输出示例:
f = open('score1.csv','r')
l = []
for line in f:
line = line.replace('\n','')
l.append(line.split(','))
f.close()
l = l[1: ]
ls = [['学号', '考核成绩']]
sm = 0
for i in range(len(l)):
score = int(int(l[i][1]) * 0.1 + int(l[i][2]) * 0.3 + int(l[i][3]) * 0.2 + int(l[i][4]) * 0.4)
sm += score
ls.append([l[i][0], str(score)])
ls = sorted(ls[1: ], key=lambda x: int(x[1]), reverse=True)
su = len(ls)
nine = 0
eight = 0
seven = 0
six = 0
five = 0
for i in range(len(ls)):
if 90 <= int(ls[i][1]) :
nine += 1
if 80 <= int(ls[i][1]) <= 89:
eight += 1
if 70 <= int(ls[i][1]) <= 79:
seven += 1
if 60 <= int(ls[i][1]) <= 69:
six += 1
if int(ls[i][1]) <= 59:
five += 1
st = "班级共有{}人,平均分:{},其中90分以上:{}人,80~89分:{}人,70~79分:{}人,60~69分:{}人,60分以下:{}人"
print(st.format(su,sm//su,nine,eight,seven,six,five))
with open('data.txt','w+',encoding='utf-8') as f:
f.write(''.join('学号,考核成绩\n'))
for row in ls:
f.write(','.join(row)+'\n')
结果: