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对应于表下的一个目录,所有 ...
随机推荐
- Spring4 mvc+maven 框架搭建(2)
在上一篇博客中,数据库数据和mybatis相关的java代码已经生成,接下来就可以使用IDE工具来搭建框架了. 在这里,我使用maven构建和管理代码,使用jdk1.8环境. 首先打开Eclipse, ...
- 浅谈Retrofit2+Rxjava2
近几年,Retrofit犹如燎原之火搬席卷了整个Android界.要是不懂Retrofit,简直不好意思出门...由于近几个项目都没用到Retrofit,无奈只能业余时间自己撸一下,写的不好的地方,还 ...
- 《垃圾回收的算法与实现》——Python垃圾回收
Python垃圾回收 python采用引用计数法进行垃圾回收 Python内存分配 python在分配内存空间时,在malloc之上堆放了3个独立的分层. python内存分配时主要由arena.po ...
- Vue + Element UI 实现权限管理系统 前端篇(七):功能组件封装
组件封装 为了避免组件代码的臃肿,这里对主要的功能部件进行封装,保证代码的模块化和简洁度. 组件结构 组件封装重构后,试图组件结构如下图所示 代码一览 Home组件被简化,包含导航.头部和主内容三个组 ...
- WPF中一个控件绑定另一个控件的属性
如同一个Grid中的一个按钮根据另一个按钮的显示与否作出不同的响应: 绑定的时候通过ElementName来指定控件 <Grid Margin="50,130"> &l ...
- Python中bisect的使用
在<Think Python>中第十章的练习中,涉及到了分半查找的bisect模块.为此,在网上查阅了Python中bisect模块的相关内容.有几个链接相对权威和明白: 1> ht ...
- golang内置数据类型作为函数参数
先上结论 golang的所有内置类型作为函数参数传递都是传值的方式(没有传递引用一说),需要注意的是:数组.slice和map作为函数参数时也是传值,但是如果对结构内元素进行的修改,修改的是原数据.如 ...
- JSP的九个隐式对象
JSP使用脚本元素作为一种简易方法在模板数据中嵌入java代码,这些脚本元素在JSP翻译成Servlet的阶段,都被转化为Servlet中的java代码. JSP引擎在调用JSP对应的_jspServ ...
- spring web应用
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- 一篇你看了就懂的DNS详解
DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住IP. 通过域名,最终得到该域名对应的IP地址 ...