Python-100-Days: Day11 Files and Exception

 

1.读取csv文件 

读取文本文件时,需要在使用open函数时指定好带路径的文件名(可以使用相对路径或绝对路径)并将文件模式设置为'r'(如果不指定,默认值也是'r'),然后通过encoding参数指定编码(如果不指定,默认值是None,那么在读取文件时使用的是操作系统默认的编码),如果不能保证保存文件时使用的编码方式与encoding参数指定的编码方式是一致的,那么就可能因无法解码字符而导致读取失败。下面的例子演示了如何读取一个纯文本文件。

 

"""
读取CSV文件Version: 0.1
Author: Maxwell
Date: 2024-05-07
"""import csvfilename = 'example.csv'try:with open(filename) as f:reader = csv.reader(f)data = list(reader)
except FileNotFoundError:print('无法打开文件:', filename)
else:for item in data:print('%-30s%-20s%-10s' % (item[0], item[1], item[2]))

2.写入CSV文件

"""
写入CSV文件Version: 0.1
Author: Maxwell
Date: 2024-05-07
"""import csvclass Teacher(object):def __init__(self, name, age, title):self.__name = nameself.__age = ageself.__title = titleself.__index = -1@propertydef name(self):return self.__name@propertydef age(self):return self.__age@propertydef title(self):return self.__titlefilename = 'teacher.csv'
teachers = [Teacher('Max', 28, '老师'),Teacher('Maxwell', 26, '专家')]try:with open(filename, 'w') as f:writer = csv.writer(f)for teacher in teachers:writer.writerow([teacher.name, teacher.age, teacher.title])
except BaseException as e:print('无法写入文件:', filename)
else:print('保存数据完成!')

3.异常机制——处理程序在运行时间可能发生的状态

"""
异常机制 - 处理程序在运行时可能发生的状态Version: 0.1
Author: Maxwell
Date: 2024-05-07
"""input_again = True
while input_again:try:a = int(input('a = '))b = int(input('b = '))print('%d / %d = %f' % (a, b, a / b))input_again = Falseexcept ValueError:print('请输入整数')except ZeroDivisionError:print('除数不能为0')# 处理异常让代码不因异常而崩溃是一方面
# 更重要的是可以通过对异常的处理让代码从异常中恢复过来

"""
异常机制 - 处理程序在运行时可能发生的状态Version: 0.1
Author: Maxwell
Date: 2024-05-07
"""
input_again = True
while input_again:try:a = int(input('a = '))b = int(input('b = '))print('%d / %d = %f' % (a, b, a / b))input_again = Falseexcept (ValueError, ZeroDivisionError) as msg:print(msg)

 

"""
异常机制 - 处理程序在运行时可能发生的状态 3Version: 0.1
Author: Maxwell
Date: 2024-05-07
"""import time
import sysfilename = input('请输入文件名: ')
try:with open(filename) as f:lines = f.readlines()
except FileNotFoundError as msg:print('无法打开文件:', filename)print(msg)
except UnicodeDecodeError as msg:print('非文本文件无法解析')sys.exit()
else:for line in lines:print(line.rstrip())time.sleep(0.5)
finally:# 此处最适合做善后事宜print('不管发生什么我都会执行')

 

 4. 从文本文件中读取数据

"""
从文本文件中读取数据Version: 0.1
Author: Maxwell
Date: 2024-05-07
"""import timedef main():# 一次性读取整个文件内容with open('tree.txt','r', encoding='utf-8') as f:print(f.read())# 通过for-in 循环逐行读取with open('tree.txt', mode='r') as f:for line in f:print(line, end='')time.sleep(0.5)print()# 读取文件按行读取到列表中with open('tree.txt') as f:lines = f.readlines()print(lines)if __name__ == '__main__':main()

 

 

"""
读取圆周率文件判断其中是否包含自己的生日Version: 0.1
Author: Maxwell
Date: 2024-05-07
"""
birth = input('请输入你的生日: ')
with open('pi_million_digits.txt') as f:lines = f.readlines()pi_string = ''for line in lines:pi_string += line.strip()if birth in pi_string:print('Bingo!!!')

 

 

"""
写文本文件
将100以内的素数写入到文件中Version: 0.1
Author: Maxwell
Date: 2024-05-07
"""from math import sqrtdef is_prime(n):for factor in range(2, int(sqrt(n)) + 1):if n % factor == 0:return Falsereturn True# 试一试有什么不一样
# with open('prime.txt', 'a') as f:
with open('prime.txt', 'w') as f:for num in range(2, 100):if is_prime(num):f.write(str(num) + '\n')
print('写入完成!')

 

"""
读写二进制文件Version: 0.1
Author: Maxwell
Date: 2024-05-07
"""
import base64with open('mm.jpg', 'rb') as f:data = f.read()# print(type(data))# print(data)print('字节数:', len(data))# 将图片处理成BASE-64编码print(base64.b64encode(data))with open('girl.jpg', 'wb') as f:f.write(data)
print('写入完成!')

 5.读取JSON数据

通过上面的讲解,我们已经知道如何将文本数据和二进制数据保存到文件中,那么这里还有一个问题,如果希望把一个列表或者一个字典中的数据保存到文件中又该怎么做呢?答案是将数据以JSON格式进行保存。JSON是“JavaScript Object Notation”的缩写,它本来是JavaScript语言中创建对象的一种字面量语法,现在已经被广泛的应用于跨平台跨语言的数据交换,原因很简单,因为JSON也是纯文本,任何系统任何编程语言处理纯文本都是没有问题的。目前JSON基本上已经取代了XML作为异构系统间交换数据的事实标准。

json模块主要有四个比较重要的函数,分别是:

  • dump - 将Python对象按照JSON格式序列化到文件中
  • dumps - 将Python对象处理成JSON格式的字符串
  • load - 将文件中的JSON数据反序列化成对象
  • loads - 将字符串的内容反序列化成Python对象

这里出现了两个概念,一个叫序列化,一个叫反序列化。自由的百科全书维基百科上对这两个概念是这样解释的:“序列化(serialization)在计算机科学的数据处理中,是指将数据结构或对象状态转换为可以存储或传输的形式,这样在需要的时候能够恢复到原先的状态,而且通过序列化的数据重新获取字节时,可以利用这些字节来产生原始对象的副本(拷贝)。与这个过程相反的动作,即从一系列字节中提取数据结构的操作,就是反序列化(deserialization)”

目前绝大多数网络数据服务(或称之为网络API)都是基于HTTP协议提供JSON格式的数据,关于HTTP协议的相关知识,可以看看阮一峰老师的《HTTP协议入门》,如果想了解国内的网络数据服务,可以看看聚合数据和阿凡达数据等网站,国外的可以看看{API}Search网站。下面的例子演示了如何使用requests模块(封装得足够好的第三方网络访问模块)访问网络API获取国内新闻,如何通过json模块解析JSON数据并显示新闻标题,这个例子使用了天行数据提供的国内新闻数据接口,其中的APIKey需要自己到该网站申请。

 

"""
读取JSON数据Version: 0.1
Author: Maxwell
Date: 2024-05-07"""import json
import csv2json_str = '{"name": "Max", "age": 26, "title": "老师"}'
result = json.loads(json_str)
print(result)
print(type(result))
print(result['name'])
print(result['age'])# 把转换得到的字典作为关键字参数传入Teacher的构造器
teacher = csv2.Teacher(**result)
print(teacher)
print(teacher.name)
print(teacher.age)
print(teacher.title)# 请思考如何将下面JSON格式的天气数据转换成对象并获取我们需要的信息
# 稍后我们会讲解如何通过网络API获取我们需要的JSON格式的数据
"""{"wendu": "29","ganmao": "各项气象条件适宜,发生感冒机率较低。但请避免长期处于空调房间中,以防感冒。","forecast": [{"fengxiang": "南风","fengli": "3-4级","high": "高温 32℃","type": "多云","low": "低温 17℃","date": "16日星期二"},{"fengxiang": "南风","fengli": "微风级","high": "高温 34℃","type": "晴","low": "低温 19℃","date": "17日星期三"},{"fengxiang": "南风","fengli": "微风级","high": "高温 35℃","type": "晴","low": "低温 22℃","date": "18日星期四"},{"fengxiang": "南风","fengli": "微风级","high": "高温 35℃","type": "多云","low": "低温 22℃","date": "19日星期五"},{"fengxiang": "南风","fengli": "3-4级","high": "高温 34℃","type": "晴","low": "低温 21℃","date": "20日星期六"}],"yesterday": {"fl": "微风","fx": "南风","high": "高温 28℃","type": "晴","low": "低温 15℃","date": "15日星期一"},"aqi": "72","city": "北京"}
"""

"""
写入JSON文件Version: 0.1
Author: Maxwell
Date: 2024-05-07
"""import jsonteacher_dict = {'name': 'Maxwell', 'age': 26, 'title': '讲师'}
json_str = json.dumps(teacher_dict)
print(json_str)
print(type(json_str))
fruits_list = ['apple', 'orange', 'strawberry', 'banana', 'pitaya']
json_str = json.dumps(fruits_list)
print(json_str)
print(type(json_str))

6.Github

Python-100-Days-Maxwell/Day01-15/code/Day11 at main · psmaxwell/Python-100-Days-Maxwell · GitHub

倘若您觉得我写的好,那么请您动动你的小手粉一下我,你的小小鼓励会带来更大的动力。Thanks.

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

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

相关文章

MyBatis入门例子

1、建立与数据库对应的POJO类 2、建立mybatis的配置文件 修改后如下: 3、创建POJO对象和Mysql数据的表之间的映射配置 4、建一个测试方法 实现从数据库中取数一条数据,封装成User对象返回 注意点: 这点,大家应该不陌生了&#x…

照片太大上传不了怎么缩小?教你几招压缩图片

在日常的工作和学习中,我们经常要用到一些图片文件,储存的图片多了之后,会对我们的电脑或者手机有影响,需要我们使用图片处理工具来压缩图片大小,那么有没有比较简单的图片压缩的方法呢?试试今天分享的几个…

【管理咨询宝藏94】某国际咨询公司供应链财务数字化转型方案

本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏94】某国际咨询公司供应链&财务数字化转型方案 【格式】PDF版本 【关键词】国际咨询公司、制造型企业转型、数字化转型 【核心观点】 - 172…

synchronized与volatile关键字

1.synchronized的特性 1.1互斥 synchronized 会起到互斥效果, 某个线程执行到某个对象的 synchronized 中时, 其他线程如果也执行到 同一个对象 synchronized 就会阻塞等待. 进入 synchronized 修饰的代码块, 相当于 加锁 退出 synchronized 修饰的代码块, 相当于 解锁 syn…

3行代码,实现一个取色器

前言 今天发现了一个很好玩的 API ——EyeDropper。 EyeDropper API 提供了一种创建拾色器工具的机制。使用该工具,用户可以从屏幕上取样颜色,包括浏览器窗口之外的区域。 这是 MDN 上对它的介绍,可以取包括浏览器窗口之外的区域。我们一起看看是怎么个事 什么是取色器 取…

关于Oracle 23ai 你要知道的几件事情

1.版本生命周期 23ai发布后的Oracle版本生命周期图,可以看到23ai是长期支持版本可以到2032年。 引申 Oracle版本分为两类 Innovation Release--创新版本,一般提供至少两年技术支持 Long Term Release --长期支持版本,一般提供5年premier和…

酸奶(科普)

酸奶(yogurt)是一种酸甜口味的牛奶饮品,是以牛奶为原料,经过巴氏杀菌后再向牛奶中添加有益菌(发酵剂),经发酵后,再冷却灌装的一种牛奶制品。市场上酸奶制品多以凝固型、搅拌型和添加…

开启智能新纪元:揭秘现代化仓储物流园区的数字孪生魅力

在数字化浪潮的推动下,物流行业正迎来前所未有的变革,现代化仓储物流园区数字孪生系统正以其独特的魅力引领着物流行业迈向更加智能、高效的新时代。 图源:山海鲸可视化 一、数字孪生:物流行业的“虚拟镜像” 数字孪生技术作为工…

C++细节,可能存在的隐患,面试题03

文章目录 11. C编译过程12. const vs #define12.1. 全局const vs 局部const 13. C内存分区14. C变量作用域14.1. 常量 vs 全局变量 vs 静态变量 15. C类型转换16. 函数指针17. 悬空指针 vs 野指针18. 为什么使用空指针,建议使用nullptr而不是NULL? 11. C…

STM32——基础篇

技术笔记! 一、初识STM32 1.1 ARM内核系列 A 系列:Application缩写。高性能应用,比如:手机、电脑、电视等。 R 系列:Real-time缩写。实时性强,汽车电子、军工、无线基带等。 M 系列:Microcont…

MCU做死循环时,到底应该用for(;;) 还是wihile(1)

MCU做死循环时 for while stm32中老工程师用forfor while背景for版本while版本正方观点:哪有好的编译器:反方观点:这种代码过时了工程师实地测试:和编译器和优化有关 建议还是用for参考 stm32中老工程师用for /* Start scheduler …

MATLAB函数fir1的C语言移值

要移值的matlab函数: h3 = fir1(16,[0.25 0.50]); C语言版本 #include <iostream> #include <cmath>#define PI acos(-1)double sincEasy(double *x, int len, int index) {double temp = PI * x[index];if (temp == 0) {return 1.0; // sinc(0) = 1}return s…

【前端】HTML基础(1)

文章目录 前言一、什么是前端二、HTML基础1、 HTML结构1.1 什么是HTML页面1.2 认识HTML标签1.3 HTML文件基本结构1.3 标签层次结构1.4 创建html文件1.5 快速生成代码框架 三、Emmet快捷键 前言 这篇博客仅仅是对HTML的基本结构进行了一些说明&#xff0c;关于HTML的更多讲解以及…

华为机考入门python3--(23)牛客23- 删除字符串中出现次数最少的字符

分类&#xff1a;字符串 知识点&#xff1a; 访问字典中keychar的值&#xff0c;不存在则返回0 my_dict.get(char, 0) 字典的所有值 my_dict.value() 列表中的最小值 min(my_list) 题目来自【牛客】 import sysdef delete_min_freq_char(s):# 计算字母出现的频次…

【linux】dmesg工具

dmesg介绍 dmesg工具用途&#xff1a; dmesg - print or control the kernel ring buffer kernel ring buffer, 内核环形缓冲区&#xff0c;也叫环形队列&#xff0c;Linux内核日志就存储在一个环形队列中&#xff0c;环形队列满的时候&#xff0c;新的消息会覆盖掉旧的消息。…

《十八》QThread多线程组件

本章将重点介绍如何运用QThread组件实现多线程功能。 多线程技术在程序开发中尤为常用&#xff0c;Qt框架中提供了QThread库来实现多线程功能。当你需要使用QThread时&#xff0c;需包含QThread模块&#xff0c;以下是QThread类的一些主要成员函数和槽函数。 成员函数/槽函数 …

02-Fortran基础--Fortran操作符与控制结构

02-Fortran基础--Fortran操作符与控制结构 0 引言1 操作符1.1 数学运算符1.2 逻辑运算符1.3 关系运算符 2 控制流程2.1 条件结构2.2 循环结构2.3 分支结构 0 引言 运算符和控制流程对编程语言是必须的,Fortran的操作符和控制流程涉及到各种数学运算符、逻辑运算符以及控制结构。…

一文了解栈

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、栈是什么&#xff1f;二、栈的实现思路1.顺序表实现2.单链表实现3.双向链表实现 三、接口函数的实现1.栈的定义2.栈的初始化3.栈的销毁4.入栈5.出栈6.返回栈…

调用nvprof报错: No kernels were profiled. No API activities were profiled.

调用nvprof报错 1 nvprof介绍 nvprof 是 NVIDIA 提供的一款用于分析 CUDA 应用程序性能的命令行性能分析器。CUDA 是一种并行计算平台和编程模型&#xff0c;允许开发人员利用 NVIDIA GPU 进行通用处理。 nvprof 帮助开发人员分析其 CUDA 应用程序的性能&#xff0c;提供各种…

C++继承 - 下

目录 1. 继承和友元 2. 继承与静态成员 3. 菱形继承以及菱形虚拟继承 3.1. 单继承 3.2. 多继承 3.3. 菱形继承 3.4. 菱形虚拟继承 3.5. 菱形继承的底层细节 3.6. 菱形虚拟继承的底层细节 3.7. 虚拟继承 4. 继承的总结 5. 相关继承练习题 5.1. 如何定义一个无法被继…