注:和上一篇有关联

(一)  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. Spring4 mvc+maven 框架搭建(2)

    在上一篇博客中,数据库数据和mybatis相关的java代码已经生成,接下来就可以使用IDE工具来搭建框架了. 在这里,我使用maven构建和管理代码,使用jdk1.8环境. 首先打开Eclipse, ...

  2. 浅谈Retrofit2+Rxjava2

    近几年,Retrofit犹如燎原之火搬席卷了整个Android界.要是不懂Retrofit,简直不好意思出门...由于近几个项目都没用到Retrofit,无奈只能业余时间自己撸一下,写的不好的地方,还 ...

  3. 《垃圾回收的算法与实现》——Python垃圾回收

    Python垃圾回收 python采用引用计数法进行垃圾回收 Python内存分配 python在分配内存空间时,在malloc之上堆放了3个独立的分层. python内存分配时主要由arena.po ...

  4. Vue + Element UI 实现权限管理系统 前端篇(七):功能组件封装

    组件封装 为了避免组件代码的臃肿,这里对主要的功能部件进行封装,保证代码的模块化和简洁度. 组件结构 组件封装重构后,试图组件结构如下图所示 代码一览 Home组件被简化,包含导航.头部和主内容三个组 ...

  5. WPF中一个控件绑定另一个控件的属性

    如同一个Grid中的一个按钮根据另一个按钮的显示与否作出不同的响应: 绑定的时候通过ElementName来指定控件 <Grid Margin="50,130"> &l ...

  6. Python中bisect的使用

    在<Think Python>中第十章的练习中,涉及到了分半查找的bisect模块.为此,在网上查阅了Python中bisect模块的相关内容.有几个链接相对权威和明白: 1> ht ...

  7. golang内置数据类型作为函数参数

    先上结论 golang的所有内置类型作为函数参数传递都是传值的方式(没有传递引用一说),需要注意的是:数组.slice和map作为函数参数时也是传值,但是如果对结构内元素进行的修改,修改的是原数据.如 ...

  8. JSP的九个隐式对象

    JSP使用脚本元素作为一种简易方法在模板数据中嵌入java代码,这些脚本元素在JSP翻译成Servlet的阶段,都被转化为Servlet中的java代码. JSP引擎在调用JSP对应的_jspServ ...

  9. spring web应用

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  10. 一篇你看了就懂的DNS详解

    DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住IP. 通过域名,最终得到该域名对应的IP地址 ...