文件读写---python

一、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')

结果:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值