实验5 文件应用编程
实验任务6
代码
# 读取并处理原始数据with open('data6.csv','r',encoding = 'gbk') as f: old_data = f.read().split('\n') del old_data[0] # 四舍五入得到新数据 new_data = [] for i in range(len(old_data)): if eval(old_data[i]) + float(0.5) >= int(eval(old_data[i])) + 1: new_data.append(str(int(eval(old_data[i]))+1)) else: new_data.append(str(int(eval(old_data[i])))) # 形成二维列表 title = ['原始数据','四舍五入后数据'] data = [] for i in range(len(old_data)): data.append([old_data[i],new_data[i]]) # 写入 with open('data6.csv','w',encoding = 'gbk') as f: f.write(','.join(title) + '\n') for i in data: f.write(','.join(i) + '\n') print('原始数据:')print(old_data)print('四舍五入后数据:')print(new_data)
运行结构
实验任务7
运行代码
with open('data7.csv','r',encoding='gbk')as f: title=[f.readline()] data=f.readlines() def getscore(ls): return ls[len(ls)-1] data=[line.strip('\n').split(',')for line in data] data.sort(key=lambda x:(x[2],-int(x[3]))) with open('data7_processed.csv', 'w', encoding = 'gbk') as f: f.write(','.join(title)) for item in data: f.write(','.join(item) + '\n') title=title[0].strip('\n').split(',') print('{:<10}'.format(title[0]),'{:<10}'.format(title[1]),'{:<10}'.format(title[2]),'{:<15}'.format(title[3])) for i in data: print('{:<10}'.format(i[0]), '{:<10}'.format(i[1]), '{:<10}'.format(i[2]), '{:<10}'.format(i[3]))
运行结果
实验任务8
运行代码
with open('hamlet.txt','r',encoding='utf-8')as f: data=f.readlines() print('行数:',len(data)) x='' for line in data: x+=line alpha=0 b=0 for i in x: if i.isalpha(): alpha+=1 else: b+=1 word=len(x.split()) print('字符数:',alpha+b) print('单词数:',word) print('空格数:',x.count(' ')) data = [line.strip('\n').split(',') for line in data] with open('hamlet_with_line_number','w',encoding='utf-8') as f: for i,j in enumerate(data,start=1): j=j[0] f.write("{}{}{}".format(i,' ',j)+'\n')
运行结果
实验任务9
运行代码
def is_valid(sfz): if len(sfz) != 18: return False elif (sfz[:-1].isnumeric() and sfz[-1] == 'X') or sfz.isnumeric(): return True else:return False with open('data9_id.txt','r',encoding='utf-8') as f: data = f.read().split('\n') del data[0] data2 = [] data3 =[] print('姓名,出生日期,年龄') for i in data: lst = i.split(',') data2.append(lst) lst2 = [] for i in data2: if is_valid(i[1]) == True: name = i[0] btd = i[1][6:14] age = str(2023 - int(i[1][6:10])) lst2.append([name,btd,age]) lst2.sort(key=lambda x:x[2],reverse=True) for i in lst2: print(i[0],end=',') print(f'{i[1][:4]}-{i[1][4:6]}-{i[1][6:8]}',end=',') print(i[2])
运行结果
实验任务10
运行代码
import datetime t = datetime.datetime.now() filename = t.strftime('%Y%m%d') + '.txt' n=eval(input('输入随机抽取人数:')) with open('data10_stu.txt', 'r', encoding = 'utf-8') as f: data=f.readlines() def random_selection(n): import random demo = random.sample(data, n) return demo x=random_selection(n) for i in x : print(i) with open(filename,'w',encoding='utf-8')as f: f.writelines(x)
运行结果
运行代码
import datetime t = datetime.datetime.now() filename = t.strftime('%Y%m%d') + '.txt' start='抽取开始' print(start.center(50,'*')) with open('data10_stu.txt', 'r', encoding='utf-8') as f: data = f.readlines() def random_selection(n): import random demo = random.sample(data, n) return demo selection=set() numbers=[] while True: n = eval(input('输入随机抽点人数:')) if n != 0: x=random_selection(n) for i in x: print(i) data.remove(i) with open(filename,'a',encoding='utf-8') as f : f.writelines(i) else: print('抽取结束'.center(50,'*')) break
运行结果