实验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

运行结果

 

 

posted @ 2023-06-04 00:17  胡梦欢  阅读(13)  评论(0编辑  收藏  举报