python读写文件练习

1.请你通过文件读写命令,读取 photo1 里的数据(提示见代码区开头)。
然后,新建名为“photo2”的图片(在同一个文件夹),写入读到的数据。
这样,我们就通过文件读写的代码,完成了图片的复制(而非鼠标右键)。

with open('photo2.png','rb') as file:  # 以“rb”模式打开图片
    data = file.read()
    with open('photo3.png','wb') as newfile:  # 以“wb”模式写入
        newfile.write(data)

2.现在有这样一个叫scores.txt的文件,里面有赫敏、哈利、罗恩、马尔福四个人的几次魔法作业的成绩。
但是呢,因为有些魔法作业有一定难度,教授不强制同学们必须上交,所以大家上交作业的次数并不一致。
罗恩 23 35 44
哈利 60 77 68 88 90
赫敏 97 99 89 91 95 90
马尔福 100 85 90
希望你来统计这四个学生的魔法作业的总得分,然后再写入一个txt文件。注意,这个练习的全程只能用Python。

file1 = open('scores.txt','r',encoding='utf-8') 
file_lines = file1.readlines() 
file1.close()

final_scores = []

for i in file_lines:
    data =i.split()
    sum = 0  # 先把总成绩设为0
    for score in data[1:]:  # 遍历列表中第1个数据和之后的数据
        sum = sum + int(score)  # 然后依次加起来,但分数是字符串,所以要转换    
    result = data[0]+str(sum)+'\n'  # 结果就是学生姓名和总分
    print(result)
    final_scores.append(result)

print(final_scores)

sum1 = open('winner.txt','w',encoding='utf-8') 
sum1.writelines(final_scores)
sum1.close()

3.现在,我们计划对课堂上得到的“winner”文档再行处理一下。
让学员的成绩从高到低排列,然后放到新文档“winner_new.txt”。

# 下面注释掉的代码,皆为检验代码(验证每一步的思路和代码是否达到目标,可解除注释后运行)。

file1 = open('winner.txt','r',encoding='utf-8') 
file_lines = file1.readlines() 
file1.close()

dict_scores = {}
list_scores = []
final_scores = []

# print(file_lines) 
# print(len('\n'))

# 打印结果为:['罗恩102\n', '哈利383\n', '赫敏570\n', '马尔福275\n']
# 经过测试,发现'\n'的长度是1。所以,名字是“第0位-倒数第5位”,分数是“倒数第4位-倒数第二位”。
# 再根据“左取右不取”,可知:name-[:-4],score-[-4:-1]

for i in file_lines:  # i是字符串。
    print(i)
    name = i[:-4]  # 取出名字(注:字符串和列表一样,是通过偏移量来获取内部数据。)
    score = int(i[-4:-1])  # 取出成绩
    print(name)
    print(score)
    dict_scores[score] = name  # 将名字和成绩对应存为字典的键值对(注意:这里的成绩是键)
    list_scores.append(score)

# print(list_scores)
list_scores.sort(reverse=True)  # reverse,逆行,所以这时列表降序排列,分数从高到低。
# print(list_scores)

for i in list_scores:
    result = dict_scores[i] + str(i) + '\n'
    #print(dict_scores[i])
    # print(result)
    final_scores.append(result)

print(final_scores)  # 最终结果

winner_new = open('winner_new.txt','w',encoding='utf-8') 
winner_new.writelines(final_scores)
winner_new.close()

记录:(1)自己做的时候在考虑如何根据已排序好的列表,依次输出字典的值。最后终于想出来了,就是对列表遍历(因为这时列表的成绩已经是按高低排序的),然后将字典对应的键(这里就是每个人的名字)输出dict_scores[i],然后将名字和分数拼接,加入一个新的列表final_scores = []即可。
(2)遇到的第二个问题是:在写入文件的时候,我用的是winner_new.write(final_scores),然后出现报错,因为write只能写入字符串,不能写入列表。因此这里要用writelines即可。

4.练习要求
语文老师将一些古诗存在txt文档里,一句一行。
最近,他计划抽一些古诗,自己设置一些空来让学生默写。
请你用代码帮老师完成这项工作(只要处理了一个文档,加上循环就能处理无数个文档了)。
锦瑟
[唐] 李商隐

锦瑟无端五十弦,
一弦一柱思华年。
庄生晓梦迷蝴蝶,
望帝春心托杜鹃。
沧海月明珠有泪,
蓝田日暖玉生烟。
此情可待成追忆,
只是当时已惘然。

list_test = ['一弦一柱思华年。\n','只是当时已惘然。\n']  # 将要默写的诗句放在列表里。
with open ('poem2.txt','r') as f:
    lines = f.readlines()
print(lines)
with open('poem2.txt','w') as new:
    for line in lines:
        if line in list_test:  # 属于默写列表中的句子,将其替换成横线。
            new.write('____________。\n')
        else:
            new.write(line)
  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值