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

news2024/11/13 8:55:46

前言

这些题都是在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/481278.html

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

相关文章

stm32F103 WIFIESP8266模块连接阿里云平台

(43条消息) ESP8266 AT MQTT 透传指令接入阿里云物联网平台笔记&#xff1b;_安信可科技的博客-CSDN博客 这里这篇博客提到的固件是错误的 我用的固件是这个&#xff0c;刷固件之后&#xff0c;可以连上阿里云。 ATMQTTCLIENTID0,"ClienId"//clientId第二个参数注…

权限提升:烂土豆 || DLL 劫持.

权限提升&#xff1a;烂土豆 || DLL 劫持. 权限提升简称提权&#xff0c;由于操作系统都是多用户操作系统&#xff0c;用户之间都有权限控制&#xff0c;比如通过 Web 漏洞拿到的是 Web 进程的权限&#xff0c;往往 Web 服务都是以一个权限很低的账号启动的&#xff0c;因此通…

数字化转型:如何利用文件管理系统提高制造业的工作效率

对于制造行业的企业用户&#xff0c;在日常企业文件管理中会遇到怎样的问题呢&#xff1f;制造业又该该如何高效管理文件呢&#xff1f; 这些问题困扰着机械制造行业客户…… 1&#xff09;项目多、文件杂&#xff0c;统一管理不便 2&#xff09;文档资料在公司内部流转不畅 …

14-5-进程间通信-信号

一、信号的基本概述 1.什么是信号&#xff1f; &#xff08;1&#xff09;对于linux来说&#xff0c;信号是软中断。比如在终端输入ctrlc来中断正在运行的程序&#xff0c;原理是linux通过信号机制来停止一个程序。 &#xff08;2&#xff09;每一个信号都有一个名字和编号&…

Django项目页面样式如何“传给”客户端浏览器

前言 django项目在视图函数中借助render函数可以返回HTML页面&#xff0c;但是HTML页面中如果引入了外部CSS文件或者JavaScript文件在浏览器页面无法加载&#xff0c;因此就必须有一种方式能够将HTML文档中引入的外部文件能够在客户端浏览器上加载&#xff0c;这种方式就是配置…

QML状态与过渡(States and Transitions)

目录 一 状态&#xff08;States&#xff09; 一 过渡&#xff08;Transitions&#xff09; 通常我们将用户界面描述为一种状态。一个状态定义了一组属性的改变&#xff0c;并且会在一定的条件下被触发。另外在这些状态转化的过程中可以有一个过渡&#xff0c;定义了这些属性…

第二十章 中介者模式

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…

SpringSecurity框架学习与使用

SpringSecurity框架学习与使用 SpringSecurity学习SpringSecurity入门SpringSecurity深入认证授权自定义授权失败页面权限注解SecuredPreAuthorizePostAuthorizePostFilterPreFilter 参考 SpringSecurity学习 SpringSecurity入门 引入相关的依赖&#xff0c;SpringBoot的版本…

IPsec中IKE与ISAKMP过程分析(快速模式-消息3)

IPsec中IKE与ISAKMP过程分析&#xff08;主模式-消息1&#xff09;_搞搞搞高傲的博客-CSDN博客 IPsec中IKE与ISAKMP过程分析&#xff08;主模式-消息2&#xff09;_搞搞搞高傲的博客-CSDN博客 IPsec中IKE与ISAKMP过程分析&#xff08;主模式-消息3&#xff09;_搞搞搞高傲的博客…

Spring - IoC

Spring - IoC Spring- IoC1)Spring简介1.1)什么是框架1.2)框架的作用1.3)Spring是什么1.4)Spring的体系结构1.5)Spring的发展历史1.6)Spring优势 2)IoC简介2.1)优质程序代码的制作原则2.2)耦合与内聚2.3)工厂模式发展史2.4)Spring发展历程2.5)IoC 3)入门案例3.1)案例环境说明3.…

synchronized用法加锁原理

目录 使用场景不同场景加锁对象结论验证实验实验1&#xff1a; synchronized 修饰方法&#xff0c;加锁对象是类实例&#xff0c;不同实例之间的锁互不影响实验2&#xff1a; synchronized 加在静态方法上&#xff0c;加锁对象是方法所在类&#xff0c;不同类实例之间相互影响实…

docker镜像导入导出

项目背景 1. docker pull 的时候比较慢的情况下&#xff0c; 之前已经下载过的话&#xff0c;可以直接导入使用 2. 有些服务器不允许上外网的情况下&#xff0c;可以先在自己电脑上下载好&#xff0c;再上传到服务器上进行安装 导出镜像 查看镜像 docker images 导出镜像 …

【文件系统】

目录 1 inode 2 软链接 3 硬链接 1 inode 当我们创建一个文件时&#xff0c;用带上 -i 选项可以查看文件的inode: 其中第一个选项就是文件的inode,除此之外另外几列表示的是&#xff1a; 模式 硬链接数 文件所有者 所属组 大小 最后修改时间文件名 ls -l读取存储在磁盘上的文…

windows编译安卓源码记录

环境 Windows10 vmware17 ubuntu22 ubuntu环境设置 装完ubuntu系统后拖拽复制文件进去验证vmtools安装情况&#xff0c;如果vmtools异常很麻烦&#xff0c;试了n多方法&#xff0c;最后还是重新安装系统解决&#xff0c; 如果ok的话&#xff0c;再继续下步骤&#xff0c;否…

【C++入门第四期】类和对象 ( 上 )

前言类的使用类的定义类的两种定义方式&#xff1a;成员变量名的定义建议 类的访问限定符类的作用域类的实列化如何计算类的大小结构体内存对齐规则 this指针this指针的特性 前言 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过…

Linux的目录结构

在Linux世界里&#xff0c;一切皆文件硬件如显卡、cpu等都会映射成一个文件具体的目录结构/bin 是Binary的缩写&#xff0c;这个目录存放着最经常使用的命令 /sbin(/usr/sbin、/usr/local/sbin) s就是Super User的意思&#xff0c;这里存放的是系统管理员使用的系统管理程序 /h…

Elasticsearch扫盲篇

1. 什么是搜索&#xff1f; 在日常的工作和学习中&#xff0c;当我们说想找查询任何的信息的时候&#xff0c;可能第一时间会想到上百度或者谷歌去搜索一下。比如说找一部自己喜欢的电影&#xff0c;或者说找一本喜欢的书&#xff0c;或者找一条感兴趣的新闻。但是百度和谷歌不…

QML基础模型(Basic Model)

最基本的分离数据与显示的方法是使用Repeater元素。它被用于实例化一组元素项&#xff0c;并且很容易与一个用于填充用户界面的定位器相结合。 最基本的实现举例&#xff0c;repeater元素用于实现子元素的标号。每个子元素都拥有一个可以访问的属性index&#xff0c;用于区分不…

第11章 项目人力资源管理

文章目录 项目人力资源管理 过程11.2.1 编制项目人力资源计划的工具与技术 375&#xff08;1&#xff09;层次结构图&#xff08;工作、组织、资源 分解结构&#xff09;&#xff08;2&#xff09;矩阵图&#xff08;责任分配矩阵&#xff0c;RAM&#xff09;&#xff08;3&…