【Python基础练习100题--第一篇:文件篇】

news2024/11/25 4:57:58

前言

这些题都是在B站的练习题,链接在这
对于刚学python的新手来说十分的适合,
可以加强和巩固我们的基础。
嘿嘿 一起噶油吧!🍉

🍉1.对学生成绩排序

# 这里对字典进行排序,同事使用到了sorted函数
# 这个是十分经典的一个题目 ,童鞋们必须掌握哟
students = [
    {'sno': 101, "sname": '小张', 'sgrade': 90},
    {'sno': 102, "sname": '小李', 'sgrade': 99},
    {'sno': 103, "sname": '小王', 'sgrade': 98},
    {'sno': 104, "sname": '小赵', 'sgrade': 88},
]
# sort函数只对列表好使,但是对其他序列不好使,因此我们使用sorted函数
students_sorted = sorted(students, lambda = x:x['sgrade'], reverse = True)
# 函数有三个参数 ,第一个是需要进行排序的字典,也可以是其他的可迭代对象
# 第二个参数是一个匿名函数 指出进行排序的键是x对象的'sgrade'属性,
# 这个我们可以看到 students作为匿名函数的第一个参数传入进去了
# 第三个参数表示这个排序的结果需不需要逆置 True表示降序排列

# 最后我们输出这个结果
print(f"学生{students},成绩结果{students_sorted}")

🍉2.读取成绩文件进行排序

文件创建与内容

# 从这里开始就涉及到操纵文件了
# 我们在目录下创建一个学生成绩文件夹,里面放着学生的基本信息和成绩,.py与文本文件在同一级别下

# 第一步:读取文件
def read_file():
	result = []
	# 使用with open 打开一个文件,并将结果 作为fin
	with open('./stu_grade_input.txt',encoding = 'utf-8') as fin:
		for line in fin:
			line = lin[:-1] # [0,-2] 即不包含最后一个
			print(line, type(line))  # 101,小张,65 <class 'str'>
			list_read = line.split(',')
			print(list_read, type(list_read)) # ['103', '小天', '67'] <class 'list'>
			result.append(line.split(',')) # 将每一行以','号分割,并添加到数组末端
			print("result", result) # [['101', '小张', '65'], ['102', '小胡', '45'], ['103', '小天', '67'], ['104', '小都', '79'], ['105', '小习', '98'], ['106', '小李', '100'], [''], [''], ['']]
			# 发现后面有三个空的数据
			# 我们利用切片把他去掉再返回
            print("result_clip", result[:-3]) # 正常的数据
            return result[:-3]

datas = read_file()
# 第二步: 排序数据
def student_sorted(datas):
	return sorted(datas,lambda x:int(x[2]),reverse:Ture)

datas = student_sorted(datas)
print(datas) # 这里为排序好的数据

# 第三步: 写出文件
def write_file(datas):
# 	注意这里要加上encodeing= 'utf-8',不然可能会出现乱码
# 此外 这里的文件模式是w
	with open('./stu_grade_sorted_output.txt','w',encodeing= 'utf-8') as fout:
		for data in datas:
			fout.write(','.join(data)+'\n')

write_file(datas) # 将排序好的数据写出文件

🍉3.读取成绩文件计算最高分和最低分

# 第一步:读取文件
def read_file():
	scores = []
	with open('./stu_grade_input.txt',encoding="utf-8") as fin
		for line in fin:
			line = line[:-1]
			fields = line.split(",")
			 # 把最后一个成绩放入数组中,而不是把整个数组
			scores.append(int(fields[-1] ))
			print('scores',scores)
			max_score = max(scores)
			max_score = min(scores)
			avg_score = sum(score) / len(scores)
			return max_score ,min_score,avg_score 

# 解包拆包
 max_score ,min_score , avg_score  = read_file()
 print(f"最大值{max_score },最小值{min_score },平均值{avg_score  }")		

🍉4.统计英文文章单词出现的次数

英文文本与py文件同级

# 这里使用字典存储,单词和单词出现的次数
word_count = {} # 创建一个空字典
with open('./english_python.txt') as fin:
	for line in fin:
		line = line[:-1]
		words = line.split() # 是一个数组
		print("words",words)
		# 此时的word表示列表的值
		for word in words:
			if word not in word_count:
				word_count[word] = 0
			else word_count[word]+=1

print(word_count) # 输出这个字典

result = sorted(word_count,lambda x : x[1],reverse = True)	
print(type(result))  # <class 'list'>
result = result[:5] # 只取前五位
print(result )

🍉5.统计目录下文件的大小

import os
# os.path.getsize 方法获取文件文本的大小
print(os.path.getsize("english_python.txt"))
sum_size = 0

# 遍历根目录下的所有文件和文件夹 使用os.listdir
for file in os.listdir("./")
#如果是文件 那么计算文件的大小
	if os.path.isfile(file):
		print(file)
		sum_size += os.path.getsize(file)

print(f"所有的文件大小是{sum_size /1024}KB")

6.计算班级的最高分和最低分

文件内容及目录结构

# 和上题类似 ,字典的键为科目,值为分数
# 创建一个空的子带你
course_grades = {}

# 编码格式为utf-8 如果不加的话,可能乱码
with open("course_student_grade_input.txt",encoding = "utf-8") as fin:
	for line in fin:
		line = line[-1] # 去掉最后一个换行符
		# 解包和拆包
		course, sno, sname, grade =  line.spilt(",")
		if course not in course_grades:
		# 将课程的值赋值为一个数组,里面放成绩
			course_grades[course] = [] # 键名叫course课程名,键值为数组,里面拼接成绩
		else course_grade[course].append(int(grade))


print(course_grades)

# 输出这个字典中的课程名 和对应课程的最大最小和平均分
# 通过course_grades.items() 获取到一对键值对
#如果是values 获取的是一组values值
# 如果是keys 获取的是一组keys值
for course, grades in course_grades.items()
	print(course,max(grades ),min(grades),sum(grades)/len(grades))

🍉7.按文件后缀名整理文件夹

目录结构

# 怎么获取文件名?
# import os
# os.path.splitext('/path/to/aaa.mps') # 会返回前面的路径和后缀名

# 怎么移动后缀名文件达到整理相同文件的作用呢?
# import shutil
# shutil.move('aaa.text','dir/')

import os
import shutil

dir = './arrange_dir' # 把整理的文件放在这个文件夹下面
for file in os.listdir(dir) # 获取目录下所有的文件名
	print(file)
	ext = os.path.splitext(file)[1] # 获取到文件名,将文件名拆分并获取到他的第二个元素,即后缀名
	print(file,ext) # 查看文件的后缀名和
	ext = ext[1:]
# 如果没有文件夹,就创建一个文件夹,以后缀名创建一个文件夹
	if not os.path.isdir(f'{dir}/{ext}'):
		os.mkdir(f'{dir}/{ext}')
# 开始移动文件,使用shutil库
source_path = f("{dir} / {dile}")
target_path = f("{dir} / {ext}/{file}")
shutil.move(source_path,target_path)
print(file,ext)

🍉8.实现不同文件的数据关联

两个表之间关联

# 本题是想将两个表关联起来
# 一个是学生成绩信息表,一个是教师信息表
# 当然是需要用到字典的
course_teacher_map = {}
with open("./course_teacher.txt",encoding = 'utf-8') as fin:
	for line in fin:
		line = line[:-1]
		course,teacher = line.split(",")
		course_teacher_map[course] = teacher

print(course_teacher_map)

with open("./course_student_grade_input.txt",encoding="utf-8") as fin:
	 for line in fin:
        line = line[:-1]
        course,sno,sname,sgrade = line.split(",")
        teacher = course_teacher_map.get(course) # 将字典中老师的名字赋值给teacher这个属性
        print(teacher ,course,sno,sname,sgrade)

🍉9.批量合并多个txt文件

# 小知识 :py读取文件的两种方法
# 方法1:按行读取 for line in fin
# 方法2:一次读取所有内容到一个字符串 content = fin.read()
import os

contents = []
data_dir = "./arrange_dir/txt"
#读取目标文件下所有的文件
for file in os.listdir(data_dir):
# 将文件名放在data_dir下面
	file.path = f'{data_dir}/{file}'
	# 如果是文件并且这个文件的后缀名是txt 那么将这个文件写入到content中
	# 这里调入的是fin.read()是将所有的内容都读入到content中,而不是一行一行的读
	if os.path.isfile(file_path) and file.endswith(".txt"):
		with open(file_path) as fin:
			content.append(fin.read())
		print(file_path)


final_content = "\n".join(contents)

with open("./arrange_dir/many_txt", "w") as fout:
	fout.write(dinal_content)

🍉10.统计每个兴趣的学生人数

文本内容

# 很明显是一个字典
# 兴趣为键,学生人数为值
like_count = {}
like_list = []
# 先读取文件
with open("./student_like.txt", encoding="utf-8") as fin:
    for line in fin:
        line = line[:-1]
        sname, likes = line.split(" ")
        print(sname, type(sname))  # 小张 <class 'str'>
        print(likes, type(likes))  # 篮球,羽毛球 <class 'str'>
        like_list = likes.split(" ") # 此时的like_list是数组
        for like in like_list:
            if like not in like_count:
                like_count[like] = 0
            like_count[like] += 1

print(like_count)

🍉 学无止境,都看到这了,点个赞关注支持一下呗!嘿嘿(* ̄︶ ̄)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/480668.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【安全工具】Httpx信息收集

文章目录 前言一、下载二、使用步骤1.帮助文档2.常用命令常用组合命令&#xff1a; 总结 前言 HTTPX 是一个功能强大的 HTTP 客户端工具&#xff0c;用于执行各种网络任务&#xff0c;例如发现 Web 应用程序漏洞、探测域名和端口等。它使用了 retryablehttp 库来运行多个探测器…

[计算机图形学]相机与透镜(前瞻预习/复习回顾)

一、相机 1.成像方法 成像方法有两种&#xff0c;合成和捕捉&#xff0c;我们之前所说的光栅化和光线追踪都属于合成的方法&#xff0c;也就是实际上不存在的东西。而另一种成像方法叫做捕捉成像&#xff0c;也就是把真实世界中存在的一些东西变成照片这就是捕捉成像&#xf…

【量化课程】01_投资与量化投资

文章目录 1.1 什么是投资1.1.1 经济意义上的投资1.1.2 投资的分类1.1.3 金融投资1.1.4 个人投资者投资品种1.1.5 投资VS投机 1.2 股票投资的基本流程1.3 常见的股票投资分析流派1.3.1 投资者分析流派 1.4 什么是量化投资1.4.1 量化投资基本概念1.4.2 量化投资的优势1.4.3 量化投…

C多线程、锁、同步、信号量

文章目录 一 线程函数1.1 创建线程1.2 线程退出1.3 线程回收1.4 线程分离&#xff1a;1.5 其他线程函数1.5.1 线程取消1.5.2 线程ID比较 二 线程同步2.1 互斥锁2.1.1定义2.1.2 初始化2.1.3 销毁2.1.4 加锁 、 常试锁、解锁2.1.5 互斥锁使用 2.2 死锁2.3 如何避免死锁2.4 读写锁…

05_从0运行,重定位,初始化,中断再到定时器

总结 这边简单讲讲,代码上电后从0开始发生了什么,为什么要重定位把代码复制到sdram, bin文件前面几条跳转函数都跳转去哪 中断产生后发生什么 重定位问题 1.为什么需要重定位 把程序从一个位置移到另一个位置 叫重定位 可以只重定位部分段的数据 也可以把所有的都重定位到sd…

Linux运维之shell基础

一.流程控制 1.if判断 基本语法&#xff1a; if [ 条件判断式 ] then 程序 elif [ 条件判断式 ] then 程序 else 程序 fi注意事项&#xff1a; ①[ 条件判断式 ]&#xff0c;中括号和条件判断式之间必须有空格②if 后要有空格 例如&#xff0c;现在写一个if.sh脚本文件 #…

echarts关于自定义饼图数据刷新和颜色渲染问题

在使用echarts的自定义饼图Customized Pie时&#xff0c;定义的动态数据会发生颜色无法渲染的问题&#xff0c;如下图所示&#xff1a; 该图表的颜色是根据itemStyle内的color属性而来&#xff0c;如下&#xff1a; itemStyle: {color: #4d90fe, /* 图表的颜色 */shadowBlur:…

【python知识】importlib包详解

importlib — The implementation of import — Python 3.11.3 documentation 目录 一、说明 二、 模块导入简介 2.1 最简单的 importlib用途 2.2 importlib 包的目的有三个 2.3 import_module() 和__import__() 三、高级模块使用 3.1 动态引入 3.2 模块引入检查 3…

SpringBoot整合Mybatis-Plus、Jwt实现登录token设置

Spring Boot整合Mybatis-plus实现登录常常需要使用JWT来生成用户的token并设置用户权限的拦截器。本文将为您介绍JWT的核心讲解、示例代码和使用规范&#xff0c;以及如何实现token的生成和拦截器的使用。 一、JWT的核心讲解 JWT&#xff08;JSON Web Token&#xff09;是一种…

JavaWeb——HTML和CSS

HTML和CSS定义 标记语言 :比如XML:可扩展的标记语言&#xff0c;标签可以自己定义&#xff0c;解析时需要按照定义的规则去解析。 学习目的:掌握常见标签和常见样式的使用 HTML 结构: 特点: 1.不区分大小写&#xff0c;不管是<html>还是<HTML>都是一样的作用 …

错题笔记第一篇

目录 1. strlen的用法2. case3. switch4. 二分查找 1. strlen的用法 正确答案 &#xff1a;C strlen计算的是字符串的长度&#xff0c;二字符串是以\0结尾&#xff0c;而咱们并没有存储\0&#xff0c;后序的空间是未知的&#xff0c;strlen找不到\0就会一直找&#xff0c;所以它…

如何使 VSCode 中 CMake Debug 的输出显示在 cmd 上而不是自带的 debug console

如何使 VSCode 中 CMake Debug 的输出显示在 cmd 上而不是自带的 debug console 首先需要明确的一点是从 VSCode 插件商店下载的 CMake 是默认打印输出的结果在 debug console 中的&#xff0c;就像下面这样&#xff1a; 可以看到&#xff0c;一个问题是在加载 dll 时候会频繁…

82. Python split方法-分割字符串

82. split方法-分割字符串 文章目录 82. split方法-分割字符串1. 什么是split( )函数2. split( )方法的语法格式如下&#xff1a;3. 实操练习4. 列表索引取值知识回顾5. 用split方法分解网址提取有效信息6. 从地址信息中拆分省、市、区信息 1. 什么是split( )函数 split[splɪ…

深度学习模型压缩与优化加速

1. 简介 深度学习&#xff08;Deep Learning&#xff09;因其计算复杂度或参数冗余&#xff0c;在一些场景和设备上限制了相应的模型部署&#xff0c;需要借助模型压缩、系统优化加速、异构计算等方法突破瓶颈&#xff0c;即分别在算法模型、计算图或算子优化以及硬件加速等层…

《LearnUE——基础指南:上篇—2》——GamePlay架构之Level和World

目录 听说世界是由多个Level组成的 1.2.1 引言 1.2.2 建造大陆&#xff08;ULevel&#xff09; 1.2.3构建世界&#xff08;World&#xff09; 1.2.4总结 听说世界是由多个Level组成的 1.2.1 引言 上小节谈到Actor和Component的关系&#xff0c;UE利用Actor的概念组成了世…

GitLab统计代码量

gitlab官方文档&#xff1a;https://docs.gitlab.com/ee/api/index.html 1、生成密钥 登录gitlab&#xff0c;编辑个人资料&#xff0c;设置访问令牌 2、获取当前用户所有可见的项目 接口地址 GET请求 http://gitlab访问地址/api/v4/projects?private_tokenxxx 返回参数 …

【文章学习系列之模型】Non-stationary Transformers

本章内容 文章概况总体结构主要模块Series Stationarization&#xff08;序列平稳化模块&#xff09;De-stationary Attention&#xff08;逆平稳化注意力模块&#xff09; 实验结果消融实验总结 文章概况 《Non-stationary Transformers:Exploring the Stationarity in Time …

Docker 存储

Docker 存储 docker 默认存储方式docker 持久化存储Volumes &#xff08;卷&#xff09;简介推荐使用情况 Bind mounts &#xff08;绑定挂载&#xff09;简介推荐使用情况 绑定挂载与卷注意点 docker 非持久化存储tmpfs mounts &#xff08;tmpfs 挂载&#xff09;简介推荐使用…

leetcode100——相同的树

文章目录 题目详情分析Java完整代码 题目详情 leetcode100 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例&#xff1a; 分析 主要想法…

vue3头像上传组件

用到了自定义组件v-model的双向绑定使用input的typefile这个原生html元素&#xff0c;通过监听change事件&#xff0c;获取到选择的文件&#xff08;注意&#xff0c;选择完文件值后&#xff0c;要把这个隐藏的input的typefile元素的value置为空&#xff0c;否则&#xff0c;下…