15关,文档的读和写 Q1:路径语法报错有问题?
A1: 1)检查一下路径格式,有同学复制粘贴的时候把运行地址也粘贴进去了 2)确认是否是win系统,如果是,在路径前面加r,或更改为双斜杠 Q2:UnicodeDecodeError报错(类型1)
A2:修改第1行代码encoding='utf-8'为encoding=‘gbk’ #这里有部分同学不太熟悉,会写成uft-8,报错会有详细提示 (图片待补充) Q3:文档打开是乱码问题
A3: 修改右下角编码“utf-8”为“gbk”试试,部分电脑系统默认为gbk。遇到类似的错误尝试多改几次 步骤为:点击编码>>>通过编码重新打开>>>输入gbk查找就可以选择
Q4:非法字符/ufeff(或者空格)
A4:将代码中的'utf-8'改为'utf-8-sig' Q5:为什么第二次read没有值 自动检测f=open(' ','r','encoding='') a=f.read() b=f.read() 打印a有值,b没有值 A5:因为读了一次文件后光标已经到了文件的末尾了,所以再读就读不到内容了 Q6:unicodedecode error:无效字节(类型2)
A6:重新解码查看,代码是否是正确的
本题错误如上 编码,即将人类语言转换为计算机语言,就是【编码】encode();反之,就是【解码】decode() Q7:为什么会出现很多遍“难念的经” 自动检测f1 = open('./1.txt','a',encoding='utf-8') #以追加的方式打开一个文件,尽管并不存在这个文件,但这行代码已经创建了一个txt文件了 f1.write('难念的经') #写入'难念的经'的字符串 f1.close() #关闭文件 f2 = open('./1.txt','r',encoding='utf-8') #以读的方式打开这个文件 content = f2.read() #把读取到的内容放在变量content里面 print(content) #打印变量content f2.close() #关闭文件 A7:因为a是追加模式,每次运行是在1.txt追加,每次追加后1.txt内容都有更新。运行次数过多,可检查1.txt,每次只添加一次“难念的经” Q8:哈利波特&赫敏的成绩分数代码解释 自动检测file = open(r'E:\python code\基础语法\15关\赫敏','r',encoding='utf-8') file_lines = file.readlines() file.close() final_scores = [] for i in file_lines: data =i.split() sum = 0 for score in data[1:]: sum = sum int(score) #这里是遍历列表,得到列表中的分数并且相加 result = data[0] str(sum) '\n' #也就是变量result为名字(对应的为偏移量0) 总分数 换行标志 final_scores.append(result) winner = open('winner.txt','w',encoding='utf-8') winner.writelines(final_scores) winner.close() #写入换行的内容 A8: 1)关于realines()函数作用及用法:用于读取所有行(直到结束符 EOF)并返回列 >>>也就是输出结果为: ['罗恩 23 35 44\n', '哈利 60 77 68 88 90\n', '赫敏 97 99 89 91 95 90\n', '马尔福 100 85 90'] 2)关于split() 函数的作用及用法:拆分字符串。通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list) >>>也就是输出结果为: ['罗恩', '23', '35', '44'] ['哈利', '60', '77', '68', '88', '90'] ['赫敏', '97', '99', '89', '91', '95', '90'] ['马尔福', '100', '85', '90'] Q9:课程必做练习题解释 自动检测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) #i的值为 #['罗恩', '23', '35', '44'] #['哈利', '60', '77', '68', '88', '90'] #['赫敏', '97', '99', '89', '91', '95', '90'] #['马尔福', '100', '85', '90'] name = i[:-4] # 取出名字(注:字符串和列表一样,是通过偏移量来获取内部数据。) #i=['马尔福', '100', '85', '90','\n'] #name = i[:-4],所以输出形式name的值为['马尔福'] 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() A9: 1)负数索引从后往前数,本题中对应的索引如图
2)sort排序:从大到小排列,拓展知识点见山脚sort,sort函数 Q10:为什么诗歌最后一句没有更新 A10:内容并非完全一致,查看最后一句的转行符号是否添加
Q11:罗恩打印结果未编码?
A11:文档的编码格式和代码的解析编码格式不一致,需要将文档的编码格式和代码的编码格式统一为utf-8(注意,另存为文档时记得要覆盖原来的文档)
|