第15关精华笔记pdf版——同学记得打开电脑浏览器下载哦!
副本_第15关精华笔记.pdf 0.4MB
什么是编码?
计算机只认识0和1,为了更好的交流,这种从人类语言到计算机语言转换的形式,叫做编码表。数字或者字母在计算机储存的时候需要转换成二进制,每个人转换的规则就叫做编码。
人类语言 → 计算机语言 encode()
计算机语言 → 人类语言 decode()
文件读取:
牢记步骤:打开文件 —— 读取文件 —— 关闭文件
模板写法:
第二行代码是把读取到的内容存到了filecontent变量里面,下面打印出来,read()函数是将所有内容都读取出来
但也有按行读取的需求,也就是一行行,这里要利用到readlines()函数
切记用open函数最后要close()文件
写入文件:
同样要记住最后要close()
但如果加一个with关键字,如with open 作用之后,文件对象会自动找到合适时机关闭,不需要我们手动调用close()
当然写入的数据多种多样,我们要更换写入或者读取的模式,记住下面这个表很关键!!!
其他知识点:
字符串的 split()函数:
按照空格分割字符串,str.split()。 分裂之后的字符串会被以列表元素的格式被包裹
列表的的 join()函数:
把字符串合并,用法是str.join(sequence), str代表在这些字符串之中。 与split相反,把列表中的元素合并成一串字符。
读写对象的 writelines()
因为write()的参数必须是一个字符串,但是有时候我们要写入别的内容,所以用到writelines()这后面的参数可以是列表
课后练习参考答案
练习-数据转移中的变化-参考
1.编码和解码
【参考】
# 1.分别使用gbk和utf-8编码自己的名字,并将其打印出来。
print('吴枫'.encode('gbk'))
print('吴枫'.encode('utf-8'))
# 2.复制上一步得到的结果,进行解码,打印出你的名字(两次)。
print(b'\xe5\x90\xb4\xe6\x9e\xab'.decode('utf-8'))
# 3.使用gbk解码b'\xb7\xe7\xb1\xe4\xbf\xc6\xbc\xbc\xd3\xd0\xd2\xe2\xcb\xbc',并打印出来。
print(b'\xb7\xe7\xb1\xe4\xbf\xc6\xbc\xbc\xd3\xd0\xd2\xe2\xcb\xbc'.decode('gbk'))
2.通过文件读写,复制图片
【参考】
# 先打开图片
with open('photo1.png','rb') as file: # 以“rb”模式打开图片
data = file.read()
with open('photo3.png','wb') as newfile: # 以“wb”模式写入
newfile.write(data)
2.在读写之间处理数据-2
【参考】
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()
2.在读写之间处理数据-2
【参考】
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(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()
练习-古诗默写-参考
练习目标
这个练习,会让你学会一种方法,可以直接修改原文件中的数据。
练习要求
语文老师将一些古诗存在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)