自己编写txt文件如下:
txt内容
需求是取绩点的分数,统计绩点大于3.0的人数
UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 21: illegal multibyte sequence
读取txt的时候,若出现这种情况,则在后面附上,encoding="utf-8"即可。
f = open("C:/Users/eadhaw/Desktop/1122/test.txt","r",encoding="utf-8")
f = open("C:/Users/eadhaw/Desktop/1122/test.txt","r",encoding="utf-8")
line = f.readline() # 读取第一行
line = line[:-1] # 去掉换行符,不然打印 line 的时候会自动换行
print(line) # 打印第一行
a=[]
i = 0
while line: # 这里用 while 不是很好,读取完最后一行的时候,还会有最后一个空字符
line = f.readline()
line = line[:-1] # 去掉换行符,不然打印 line 的时候会自动换行
a = line.split(' ')[-1]
b = float(a) # str转换为浮点型才能进行大小比较
if (b>3.0):
print(line) # 打印绩点大于3.0的同学和其绩点
i = i+1
print("绩点大于3.0的同学一共:{}个".format(i)) # 统计人数
虽然可以达到目的,但是有一个缺点:不能只在最后才输出统计人数
未优化结果图
优化处理
f = open("C:/Users/eadhaw/Desktop/1122/test.txt","r",encoding="utf-8")
lines = f.readlines() # 以 list 存储,每一行当作一个元素
print(lines)
a=[]
i = 0
lines = lines[1:] # 第一行不要,即 list的第一个元素不要
print(lines)
for line in lines:
line = line[:-1] # 去掉换行符,不然打印 line 的时候会自动换行
# print (line)
# print(type(line))
a = line.split(' ')[-1]
# print(a)
b = float(a) # str转换为浮点型才能进行大小比较
if (b>3.0):
print(line) # 打印绩点大于3.0的同学和其绩点
i = i+1
f.close()
print("绩点大于3.0的同学一共:{}个".format(i)) # 统计人数
优化处理结果图