注:和上一篇有关联

(一)  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笔记(五):异常处理和数据存储的更多相关文章

  1. java调用Linux执行Python爬虫,并将数据存储到elasticsearch--(环境脚本搭建)

    java调用Linux执行Python爬虫,并将数据存储到elasticsearch中 一.以下博客代码使用的开发工具及环境如下: 1.idea: 2.jdk:1.8 3.elasticsearch: ...

  2. Android(java)学习笔记191:Android数据存储5种方式总结

    1.使用文件(File)存储 存储一般的数据 2.使用sharedperference(xml) 存储设置信息.配置信息.密码 3.数据库Sqlite 开源的,嵌入式的数据库,轻量级 4.使用Cont ...

  3. Python多线程爬虫与多种数据存储方式实现(Python爬虫实战2)

    1. 多进程爬虫 对于数据量较大的爬虫,对数据的处理要求较高时,可以采用python多进程或多线程的机制完成,多进程是指分配多个CPU处理程序,同一时刻只有一个CPU在工作,多线程是指进程内部有多个类 ...

  4. Android(java)学习笔记134:Android数据存储5种方式总结

    1.使用文件(File)存储 存储一般的数据 2.使用sharedperference(xml) 存储设置信息.配置信息.密码 3.数据库Sqlite 开源的,嵌入式的数据库,轻量级 4.使用Cont ...

  5. android学习笔记45——android的数据存储和IO

    android的数据存储和IO SharedPreferences与Editor简介 SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此其保存的数据主要是简单的类型的ke ...

  6. hadoop笔记之Hive的数据存储(视图)

    Hive的数据存储(视图) Hive的数据存储(视图) 视图(view) 视图是一种虚表,是一个逻辑概念:可以跨越多张表 既然视图是一种虚表,那么也就是说用操作表的方式也可以操作视图 但是视图是建立在 ...

  7. hadoop笔记之Hive的数据存储(桶表)

    Hive的数据存储(桶表) Hive的数据存储(桶表) 桶表 桶表是对数据进行哈希取值,然后放到不同文件中存储. 比如说,创建三个桶,而创建桶的原则可以按照左边表中学生的名字来创建对应的桶.这样子把左 ...

  8. hadoop笔记之Hive的数据存储(外部表)

    Hive的数据存储(外部表) Hive的数据存储(外部表) 外部表 指向已经在HDFS中存在的数据,可以创建Partition 它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异 外部 ...

  9. hadoop笔记之Hive的数据存储(分区表)

    Hive的数据存储(分区表) Hive的数据存储(分区表) 分区表 Partition对应于数据库的Partition列的密集索引 在Hive中,表中的一个Partition对应于表下的一个目录,所有 ...

随机推荐

  1. 8皇后问题(c++/python实现)

    问题描述:在8*8的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任何两个皇后都不能处于同一行.同一列或者同一斜线上,问有多少种摆法. 算法分析: 利用3个数组分表来标记冲突,数组a.b.c. a数组 ...

  2. vim常用命令总结(转)

    vim常用命令 -------------------------------------------------------------------------------------------- ...

  3. Java8-函数复合用法

    JDK8自带的函数式接口Function有两个默认方法andThen和compose,它们都返回Function的一个实例,可以用这两个方法把Function接口所代表的的Lambda表达式复合起来. ...

  4. 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装用来定时任务apscheduler库(图文详解)

    不多说,直接上干货!  Anaconda2 里 PS C:\Anaconda2\Scripts> PS C:\Anaconda2\Scripts> pip.exe install apsc ...

  5. Silverlight中使用MVVM(3)—进阶

    这篇主要引申出Command结合MVVM模式在应用程序中的使用 我们要做出的效果是这样的 就是提供了一个简单的查询功能将结果绑定到DataGrid中,在前面的基础上,这个部分相对比较容易实现了 我们在 ...

  6. 计数排序/Counting Sort

    计数排序的算法思想: 对于每一个元素x,只要确定了元素x有多少个比它小的元素,那么就可以知道其最终的位置. 记输入数组为A[n],存放最后排序输出的数组为B[n],提供临时存储空间的中间数组记为C[k ...

  7. 用鼠标键盘来控制你的Android手机——同屏显示简单教程

    今天在微博上看到有人用电脑鼠标操作iPhone手机玩打飞机游戏,非常炫,虽然自己用的不是iPhone,但相信Android手机肯定也能实现这样的功能,于是网上各种搜索方法,终于看到了一篇试用成功的帖子 ...

  8. notepad++ jstool 插件安装

    notepad++ 格式化显示 网上下载 jstool 插件 放入Notepad++\安装目录的plugins位置下,重启即可使用 插件-->JSTool

  9. vue 项目其他规范

    列表 vuex数据管理 * 数据模块化:vuex数据管理-数据模块化 数据适配:vuex数据管理-数据适配 数据共享:vuex数据管理-数据共享 路由优化 keep-alive组件设置 保留滚动位置 ...

  10. spring boot整合双持久层框架jpa、mybatis

    公司之前用的是spring boot + jpa,但由于jpa无法完美的解决某些动态查询问题,就使用的jdbcTemplate 动态封装SQL,由于代码相对复杂,可读性差,现准备再引入mybatis. ...