首页 > 编程语言 >实验5 文件应用编程

实验5 文件应用编程

时间:2023-06-03 14:33:39浏览次数:34  
标签:文件 items 编程 list stu 实验 print data id

实验任务6

task6

# 读取并处理原始数据
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:
    info = f.read().split('\n')
del info[0]

# 首先按专业排序
# 以专业为值创建字典
major_dict = {}
for i in info:
    person_list = i.split(',')
    major_dict[i] = person_list[2]

# 排序
items = [[k,v] for k,v in major_dict.items()]
items.sort(key=lambda x:x[1])

# 将同一专业的学生放在一起,并按照分数排序
# 计算专业数量并建立专业列表
majors_count = 1
majors_list = []
for i in range(len(items)-1):
    if items[i+1][1] == items[i][1] and items[i][1] not in majors_list:
        majors_list.append(items[i][1])
        pass
    elif items[i+1][1] == items[i][1] and items[i][1] in majors_list:
        pass
    else:
        majors_list.append(items[i+1][1])
        majors_count += 1

# 将相同专业学生放在一起:
for i in range(majors_count):
    x = locals()[f'major{i+1}'] = []  # 循环创建变量
    for j in range(len(items)):
        if items[j][1] == majors_list[i]:
            x.append(items[j][0])
        else:
            pass

# 每个专业内按照分数排序
# 以分数为值创建字典并排序
score_dict1 = {}
for i in major1:
    person_list = i.split(',')
    score_dict1[i] = person_list[3]
items1 = [[k,v] for k,v in score_dict1.items()]
items1.sort(key=lambda x:x[1],reverse = True)

score_dict2 = {}
for i in major2:
    person_list = i.split(',')
    score_dict2[i] = person_list[3]
items2 = [[k,v] for k,v in score_dict2.items()]
items2.sort(key=lambda x:x[1],reverse = True)

together = items1 + items2
final_data = [i[0] for i in together]

# 更新数据文件
final_list = []
for i in final_data:
    person_list = i.split(',')
    final_list.append(person_list)
print(final_list)
title = ['学号','姓名','专业','分数']

with open('data7.csv', 'w', encoding = 'gbk') as f:
    f.write(','.join(title) + '\n')
    for item in final_list:
        f.write(','.join(item) + '\n')

运行结果如图:

 对齐输出,方法来自http://t.csdn.cn/62kXO:

# 对齐打印
# 读取数据
with open('data7.csv', 'r', encoding = 'gbk') as f:
    data = f.read().split('\n')

# 判断是否是中文
def isChinese(ch):
    if ch >='\u4e00' and ch <= '\u9fa5':
        return True
    else:
        return False

# 计算字符长度
def lenStr(string):
    count = 0
    for line in string:
        if isChinese(line):
            count = count + 2
        else:
            count = count + 1
    return count

# 输出
for i in data:
    a = i.split(',')
    b = ''.join([x+' '*(20-lenStr(x)) for x in a])
    print(b)

运行结果如图:

 

实验任务8

# 统计
lines_count = 0 words_count = 0 chrs_count = 0 space_count = 0 with open('hamlet.txt','r',encoding = 'utf-8') as f: for line in f: words = line.split() lines_count += 1 words_count += len(words) chrs_count += len(line) for i in list(line): if i == ' ': space_count += 1 else: pass print('行数:',lines_count) print('单词数:',words_count) print('字符数:',chrs_count) print('空格数:',space_count)

运行结果如图:

# 给每一行加上序号
with open('hamlet.txt','r',encoding = 'utf-8') as f:
    text = f.readlines()

for i in range(len(text)):
    if text[i]:
        text[i] = str(i+1) + ' ' + text[i]

with open('hamlet.txt','w',encoding = 'utf-8') as f:
        f.writelines(text)

运行结果如图:

 

实验任务⑨

# 判断是否合法
def is_valid(p_id):
    if len(p_id) != 18:
        return False
    else:
        a = p_id[-1]
        b = p_id[:-1]
        if b.isdigit() == True and a == 'X' or p_id.isdigit() == True:
            return True
        else:
            return False

# 读取并筛选出合法的数据
with open('data9_id.txt','r',encoding = 'utf-8') as f:
    info = f.read().split('\n')
    del info[0]
    id_list = []
    for i in info:
        x = i.split(',')
        if x[0] not in id_list and is_valid(x[1]) == True:
            id_list.append([x[0],x[1]])

# 每个人的出生年月日,
import datetime
t = datetime.datetime.now()
year_now = int(t.strftime('%Y%m%d')[0:4])
month_now = int(t.strftime('%Y%m%d')[4:6])
day_now = int(t.strftime('%Y%m%d')[6:8])

year_dict = {}
for i in range(len(id_list)):
    p_id = id_list[i][1]
    year = int(p_id[6:10])
    month = int(p_id[10:12])
    day = int(p_id[12:14])

    p_info = id_list[i][0] + ',' + str(year) + '-' + str(month) + '-' + str(day) + ','
    if month <= month_now and day < day_now: # 判断今年是否已经过生日
        year_dict[p_info] = year_now - year - 1
    else:
        year_dict[p_info] = year_now - year

# 排序
print('姓名,出生日期,年龄')
items = [[k,v] for k,v in year_dict.items()]
items.sort(key=lambda x:x[1],reverse = True)
for i in items:
    print(f'{i[0]}{i[1]}')

运行结果如图:

 

实验任务十

task10_1

print(f"{'抽点开始':*^40}")
import random as r
with open('data10_stu.txt','r',encoding = 'utf-8') as f:
        stu = f.readlines()
# 定义抽取函数 def the_lucky_dogs(n): stu_list = [] while True: if n != 0: i = r.randint(0,len(stu)-1) if stu[i] not in stu_list: stu_list.append(stu[i]) print(stu[i]) n -= 1 else: pass else: print(f"{'抽点结束':*^40}") break # 抽取 n = int(input('输入随机抽点人数:')) the_lucky_dogs(n)

运行结果如图:

 

task10_2

print(f"{'抽点开始':*^40}")
import random as r
with open('data10_stu.txt','r',encoding = 'utf-8') as f:
        stu = f.readlines()

# 定义抽取函数
def the_lucky_dogs(n):
    stu_list = []
    while True:
        if n != 0:
            i = r.randint(0,len(stu)-1)
            if stu[i] not in stu_list:
                stu_list.append(stu[i])
                print(stu[i])
                n -= 1
            else:
                pass
        else:
            break

    for i in stu_list: # 排除之前已经被抽到的学生
        stu.remove(i)
    
# 抽取
while True:
    n = int(input('输入随机抽点人数:'))
    if n != 0:
        the_lucky_dogs(n)
    else:
        print(f"{'抽点结束':*^40}")
        break

运行结果如图:

 

 实验总结

  感觉自己文件处理不太熟练,对于各种方法所对应的数据类型不太熟悉,以及各种方法灵活组合使用还需要练习,比如匿名函数排序。另外,通过网上搜索可以找到

许多使用的技巧,大佬们的方法更加easy,思路也很巧妙,应该多加学习。

标签:文件,items,编程,list,stu,实验,print,data,id
From: https://www.cnblogs.com/ciallo/p/17445706.html

相关文章

  • 1. C++编程简介
    勿在浮沙筑高台课程:C++面向对象程序设计。面向对象,它是一个观念。那么我们要用这种观念来写程序,需要面向对象的语言,而C++就是一个支持面向对象观念的一种语言。上这门课你该具备什么样的基础呢?只要你有这些基础就够了,你曾经学过某一种procedurelanguage,最好是C语言,但是......
  • MySQL导入SQL文件过大或连接超时的解决办法
    使用navicatmysql导入sql总会出现许多的error,导致导入的sql不完整。这个问题说到底是mysql执行时间、文件大小限制,只要这样配置下,就可以正常oerror导入了。setglobalmax_allowed_packet=100000000;setglobalnet_buffer_length=100000;SETGLOBALinteractive_timeout=2......
  • 国产化麒麟系统在window系统上用hyper-v搭建虚拟机环境QT安装文件传输步骤
    团队自研股票软件关注微信公众号:QStockView,下载1    麒麟系统国产化hyper-v虚拟机环境经验1.1 简介随着国际环境的变化,软硬件国产化是现在迫切的需求,只有实现了自主研发,才能自立自强,才能实现民族伟大复兴,才能实现祖国的繁荣昌盛。为了实现这一目标,需要从window开发运......
  • vscode中markdown文件中怎么直接粘贴复制的图片?
    在vscode中显示图片用如下命令:![图片描述](图片URL)但是需要先把图片保存成文件,不太方便.安装vscode的PasteImage插件即可.这样,先截屏,然后按ctrl+alt+v键,就可以自动插入图片了,形如下面的样式:![](2023-06-02-17-41-00.png)另外,再说一个截屏的小技巧,如果是......
  • 简单Makefile文件编写
    简单编写单个C文件的Makefile文件,文件名为demo.cdemo.c文件如下:#include<stdio.h>intmain(){printf("hello,world!\n");return0;}编写Makefile文件如下:demo:demo.ogccdemo.o-odemodemo.o:demo.cgcc-cdemo.c-odemo.oclean:rm-rf......
  • git一些小经验(3)----不再跟踪纳入git管理的文件或目录
    纳入git管理的有些文件,后续不想再纳入管理了,怎么处理?比如之前我开发的输入法的数据文件,刚开始是需要纳入git管理的,以便存储初始的数据文件,但是这个文件需要不断刷新,这样后续就不需要继续纳入管理了,怎么取消呢?参考:https://blog.csdn.net/marco006/article/deta......
  • Access数据库文件HeroDB.MDB用什么工具可以打开呢?
    我们在架设GOM引擎的版本的时候,可能会发现,有的版本默认选择Access数据库,选择Access数据库的版本,我们可以在D:\mirserver\Mud2\DB这个路径找到一份HeroDB.MDB的文件,这是一个集成数据库,和HeroDB不一样DBC2000的数据库是有3个数据库文件的,分别是Magic.DB、Monster.DB、StdItems.DB,代表......
  • 零代码编程:用ChatGPT将PDF文件的表格批量转为Excel表格
    电脑中有几百个PDF文件,文件内容格式一致,每个PDF文件第一页是一个表格。想把这几百个PDF文件里面的表格都提取出来,转为excel表,该怎么办?打开ChatGPT(一定要用GPT4,编程能力很强。相比之下,gpt3.5弱太多了),输入提示词如下:d盘有一个文件夹:guanlianjiaoyi,里面有很多pdf文件;你的任务是写一个......
  • C#操作XML文件
    C#实用教程-操作xml文件引言:什么是xml文件可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数......
  • React 配置文件 | 配置本地IP地址和端口号
    问题create-react-app默认端口号是3000,当有的别的项目占用该端口号时自己想使用别的端口号时方法1、更改node_modulesa.依次打开“node_modules”—“react-scripts”—“scripts”文件夹,找到并打开start.js文件;b.在start.js文件中查找并修改“DEFAULT_PORT”项的端口值即可。2......