Python笔记(五):异常处理和数据存储
注:和上一篇有关联
(一) finally 和 输出异常信息
try:
the_man = open(r'C:\Users\123456\Desktop\test.txt')
print(the_man.readline(),end="")
except IOError as err:
#输出异常信息
print("异常信息:"+ str(err))
#str()转换为字符串
finally:
#不管是否发生异常一定会执行
the_man.close()
(二) 使用 with
(1) 上面的代码如果文件不存在,就不会创建the_man对象,那么执行the_man.close()就会出现NameError错误,所以得先判断是否存在文件 test.txt是否存在
try:
the_man = open('test.txt')
print(the_man.readline(),end="")
except IOError as err:
#输出异常信息
print("异常信息:"+ str(err))
finally:
#不管是否发生异常一定会执行
if 'test.txt' in os.listdir():
#判断当前工作目录是否存在 test.txt 文件,存在时才关闭文件
the_man.close()
(2) 用(1)中的比较麻烦,可以使用with替代,下面的代码等价上面的代码。使用with时,PYTHON会自动去关闭文件。
try:
with open('test.txt') as the_man:
print(the_man.readline(),end="")
except IOError as err:
#输出异常信息
print("异常信息:"+ str(err))
(三) 通过open(),将数据写入文件。
man = [1,2,3]
try:
with open('test.txt','w') as the_man:
print(man,file=the_man)
#man是要写入的数据, file= 是要写入的文件对象
except IOError as err:
#输出异常信息
print("异常信息:"+ str(err))
(四) 将数据长期存储
通过pickle 实现,代码如下。
import pickle
man = [1,2,3]
with open('the_man.pickle','wb') as saveman:
pickle.dump(man,saveman)
#保存数据
with open('the_man.pickle','rb') as resman:
man = pickle.load(resman)
#需要时恢复数据
print(man)
(五) 接上篇(笔记4),判断话是张三还是李四说的,分别添加到不同的列表,并存储到zs.txt和ls.txt中。
(1) 处理文件代码
from FirstPython import the_list as tl
#导入the_list模块
zs = []
ls = []
ww = []
try:
with open(r'C:\Users\123456\Desktop\测试.txt',encoding='UTF-8') as the_file:
for each_line in the_file:
try:
(role,line_spoken) = each_line.split(":",1)
if role =='张三':
# 如果role==张三,将line_spoken添加到man列表
zs.append(line_spoken)
elif role =='李四':
ls.append(line_spoken)
elif role == '王五':
ww.append(line_spoken)
except ValueError:
# 出现ValueError时,直接输出 each_line的值
print(each_line,end="")
the_file.close()
except IOError:
#找不到文件时提示文件不存在
print("文件不存在!")
try:
with open(r'C:\Users\123456\Desktop\zs.txt','w') as the_man:
tl.dslist(zs,the_man)
#调用dslist方法处理列表数据
with open(r'C:\Users\123456\Desktop\ls.txt','w') as the_other:
tl.dslist(ls,the_other)
# 调用dslist方法处理列表数据
except IOError:
print("文件不存在!")
(2) 处理列表数据的函数,模块名:the_list(Python笔记(二)中做过说明,这里做了一点修改)
def dslist(the_list,the_file):
#the_list:要处理的列表数据
#the_file:要写入的文件对象
for each_line in the_list:
if isinstance(each_line,list):
#数据类型是否为列表
dslist(each_line,the_file)
else:
print(each_line,file=the_file,end="")
Python笔记(五):异常处理和数据存储的更多相关文章
- java调用Linux执行Python爬虫,并将数据存储到elasticsearch--(环境脚本搭建)
java调用Linux执行Python爬虫,并将数据存储到elasticsearch中 一.以下博客代码使用的开发工具及环境如下: 1.idea: 2.jdk:1.8 3.elasticsearch: ...
- Android(java)学习笔记191:Android数据存储5种方式总结
1.使用文件(File)存储 存储一般的数据 2.使用sharedperference(xml) 存储设置信息.配置信息.密码 3.数据库Sqlite 开源的,嵌入式的数据库,轻量级 4.使用Cont ...
- Python多线程爬虫与多种数据存储方式实现(Python爬虫实战2)
1. 多进程爬虫 对于数据量较大的爬虫,对数据的处理要求较高时,可以采用python多进程或多线程的机制完成,多进程是指分配多个CPU处理程序,同一时刻只有一个CPU在工作,多线程是指进程内部有多个类 ...
- Android(java)学习笔记134:Android数据存储5种方式总结
1.使用文件(File)存储 存储一般的数据 2.使用sharedperference(xml) 存储设置信息.配置信息.密码 3.数据库Sqlite 开源的,嵌入式的数据库,轻量级 4.使用Cont ...
- android学习笔记45——android的数据存储和IO
android的数据存储和IO SharedPreferences与Editor简介 SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此其保存的数据主要是简单的类型的ke ...
- hadoop笔记之Hive的数据存储(视图)
Hive的数据存储(视图) Hive的数据存储(视图) 视图(view) 视图是一种虚表,是一个逻辑概念:可以跨越多张表 既然视图是一种虚表,那么也就是说用操作表的方式也可以操作视图 但是视图是建立在 ...
- hadoop笔记之Hive的数据存储(桶表)
Hive的数据存储(桶表) Hive的数据存储(桶表) 桶表 桶表是对数据进行哈希取值,然后放到不同文件中存储. 比如说,创建三个桶,而创建桶的原则可以按照左边表中学生的名字来创建对应的桶.这样子把左 ...
- hadoop笔记之Hive的数据存储(外部表)
Hive的数据存储(外部表) Hive的数据存储(外部表) 外部表 指向已经在HDFS中存在的数据,可以创建Partition 它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异 外部 ...
- hadoop笔记之Hive的数据存储(分区表)
Hive的数据存储(分区表) Hive的数据存储(分区表) 分区表 Partition对应于数据库的Partition列的密集索引 在Hive中,表中的一个Partition对应于表下的一个目录,所有 ...
随机推荐
- IdentityServer-Protecting an API using Client Credentials
使用客户凭证保护API 这篇快速开始将展示使用IdentityServer保护APIs的最基本使用场景. 在此场景中我们将定义一个API和一个要访问此API的客户端. 客户端将向IdentitySer ...
- Android内存管理篇 - 从updateOomAdjLocked看lowmemorykiller之外的Android进程回收机制
提起android的进程回收机制,大家所熟知的是Android的lowmemroykiller的机制.当系统可用内存低于某个阀值时,即会杀死这个阀值对应的Adj值的所有应用.但是本篇文章并为是要介绍L ...
- 一口一口吃掉Volley(二)
欢迎访问我的个人博客转发请注明出处:http://www.wensibo.top/2017/02/17/一口一口吃掉Volley(二)/ 相信看了第一篇教程之后,你应该会对Volley有一个初步的了解 ...
- Touch事件传递机制 Android
Touch事件分发中只有两个主角:ViewGroup和View.Activity的Touch事件事实上是调用它内部的ViewGroup的Touch事件,可以直接当成ViewGroup处理. View在 ...
- Java - replace a character at a specific index in a string?
String are immutable in Java. You can't change them. You need to create a new string with the charac ...
- Vue + Element UI 实现权限管理系统 前端篇(七):功能组件封装
组件封装 为了避免组件代码的臃肿,这里对主要的功能部件进行封装,保证代码的模块化和简洁度. 组件结构 组件封装重构后,试图组件结构如下图所示 代码一览 Home组件被简化,包含导航.头部和主内容三个组 ...
- 外网配置花生壳动态域名解析实现外网访问本地iis及vs实时调试
描述:假如已连外网,具备一台路由器的情况下在路由器设置页面配置花生壳动态域名解析,使得外网可以访问到本地iis 托管的web服务,模拟真实环境调试应用程序. 网络运营商ip的动态分配,通常网络提供商给 ...
- 解决U盘拷贝时提示文件过大问题(不能拷贝超过4个g的文件)
为什么一个16G的U盘却拷不进一个4G大点的文件呢,想必很多朋友们都在疑问? 其实这跟U盘的磁盘格式有关,目前市面上常用的U盘大都是FAT32格式,我们可以查看U盘属性. 那么FAT32是什么呢? F ...
- 一篇你看了就懂的DNS详解
DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住IP. 通过域名,最终得到该域名对应的IP地址 ...
- 【转】CSRF基本概念
本文转自:http://www.cnblogs.com/hyddd/ 一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one ...