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://xiahunao.cn/news/3017118.html

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

相关文章

LTE的EARFCN和band之间的对应关系

一、通过EARFCN查询对应band 工作中经常遇到只知道EARFCN而需要计算band的情况,因此查了相关协议,找到了他们之间的对应关系,可以直接查表,非常方便。 具体见: 3GPP TS 36.101 5.7.3 Carrier frequency and EAR…

【ROMA核心特性数据、服务、消息、设备集成及统一运维】

1、数据集成 FDI旨在解决多种数据源的快速灵活集成能力,您可以在任意时间、任意地点、任意系统之间实现实时数据订阅和定时增量数据迁移。 (1)数据集成任务的生命周期管理 (2)FDI支持修改数据集成任务的信息、查看数…

通过氧气退火增强β-Ga₂O₃二极管.中国科技大学和河北半导体研究所的研究人员在这一特定领域取得了最新重大进展

上图所示:(a)增加台面有助于提高β-Ga2O3肖特基势垒二极管的阻断电压(b)。 氧气退火和自对准台面终端使β-Ga2O3二极管进一步走向商业化。 虽然β-Ga2O3电力电子技术已经取得了长足的进步,但仍然存在挑战&…

wordpress忘记后台密码,在数据库中修改回来,然后再修改回去。

源地址:https://www.ctvol.com/seoomethods/1421332.html 我们在做wordpess运维的时候,都会遇到很尴尬的时候,有时候在错误运维中,不知道删除了什么东西,造成wordpress后台不能登录,后台页面也直接失效&am…

太原理工大学Python数据分析原理与应用(课外考题:8~11章)

这部分大概只考10分,且大部分出在选择题,填空最多一两个 (仅供参考) 第十章 (理解概念为主,无需看推导过程) 第十一章

Linux实操之常用指令详解

文章目录 vi 和 vimvi 和 vim 基本使用 开机、重启和用户登录注销关机&重启命令用户登录和注销 用户管理基本介绍基本语法细节说明修改密码删除用户查询用户信息指令切换用户查看当前用户/登录用户用户组 实用指令指定运行级别帮助指令文件目录类时间和日期类搜索查找类压缩…

ENVI下实现遥感矿物蚀变信息提取

蚀变岩石是在热液作用影响下,使矿物成分、化学成分、结构、构造等发生变化的岩石。由于它们经常见于热液矿床的周围,因此被称为蚀变围岩,蚀变围岩是一种重要的找矿标志。利用围岩蚀变现象作为找矿标志已有数百年历史,发现的大型金…

CNN-GRU-Attention(12种算法优化CNN-GRU-Attention多特征输入超前24步预测)

12种算法优化CNN-GRU-Attention模型预测的代码 采用前一天(24个小时)的特征值去预测未来24小时的输出 CNN-GRU-Attention(12种算法优化CNN-GRU-Attention)(多特征输入超前24步预测)代码获取戳此处代码获取戳此处代码获取戳此处 主…

3D渲染是什么?渲染100邀请码1a12

3D渲染是把3D模型转换为2D图像或动画的过程,涉及到多方面知识,这篇文章我们就来了解下。 1、3D渲染的原理 3D渲染的原理是模拟光线在三维空间中的传播和反射,根据物体在空间中的分布,计算出每个像素的颜色和亮度等数值&#xff…

上证50etf期权到底该怎么玩?

今天期权懂带你了解上证50etf期权到底该怎么玩?ETF期权是一种股票市场上的金融衍生品,它是在交易所上市交易的期权合约,其标的资产是某个特定的交易所交易基金(ETF),如上证50指数ETF或沪深300指数ETF等。 上…

我的256天之创作纪念日

目录 时光 数据的一些变化 开心的事 憧憬 时光 自上次CSDN的消息推送,又一个128天过去了,整天的工作和生活都在忙忙碌碌中度过,每到能静下来片刻,都倍感珍惜。因为一些原因,能够陪伴家人的时间越来越少&#xff…

ADS基础教程10-多态性(动态模型选择)

目录 一、多态性定义二、操作步骤1.模型建立2.模型选择3.执行仿真 一、多态性定义 ADS中支持一个Symbol中,可以同时存在多个子图。在仿真时可以动态选择不同的子图继续宁仿真。 二、操作步骤 1.模型建立 在上一章A…

第五章 Linux部署YUM仓库及NFS共享服务

一、YUM仓库服务 1、YUM概述 基于RPM包构建的软件更新机制可以自动解决依赖关系所有软件包由集中的YUM软件仓库提供 2、准备安装源 (1)yum软件仓库的常用类型 本地源仓库:baseurl:file://在线源仓库:ba…

参数服务器

参数服务器在ROS中主要用于实现不同节点之间的数据共享。参数服务器相当于是独立于所有节点的一个公共容器,可以将数据存储在该容器中,被不同的节点调用,当然不同的节点也可以往其中存储数据。 参数服务器,一般适用于存在数据共享…

鸟哥的Linux私房菜 总结索引 | 第四章:首次登陆与线上求助

1、首次登陆系统 一般来说,不建议 直接使用 root 的身份登陆系统,应该使用一般帐号登陆,等到有需要修改或者是创建系统相关的管理工作时, 才切换身份成为 root 因为系统管理员的权限太高了,而 Linux 下面很多的指令行…

[笔记] Win11 Microsoft Store App 离线下载

微软应用商店无法下载或下载缓慢解决方法 在一些环境下 Microsoft Store 下载速度缓慢,或者需要账号登录才能安装的场景,可以通过找到对应的离线安装包的形式进行安装。 Micorsoft Store 中的离线安装包一般后缀为 AppxBundle 和 Appx。以 Ubuntu 为例…

《十八》QThread多线程组件

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

5月7号(信息差)

🌍首次,西湖大学用蛋白质语言模型定向改造碱基编辑器,登Cell子刊 https://www.jiqizhixin.com/articles/2024-05-07-10 🎄 哈马斯宣布同意停火提议 https://finance.eastmoney.com/a/202405073067687785.html ✨ 中国将对…

Python读取ASC文件并转换成Excel文件(坐标)

import pandas as pd# 读取asc文件,指定空格为分隔符 df pd.read_csv(out_view2.asc, sep , headerNone)# 去掉空列 df df.dropna(howall, axis1)# 将数据保存到Excel文件 df.to_excel(out_view2.xlsx, indexFalse, headerFalse)效果图

[嵌入式AI从0开始到入土]17_Ascend C算子开发

[嵌入式AI从0开始到入土]嵌入式AI系列教程 注:等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间,后期会考虑出视频教程,务必催更,以防我变身鸽王。 第1期 昇腾Altas 200 DK上手 第2期 下载昇腾案例并运行 第3期 官…