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)