文件与异常

python中的输入机制是基于行的, open()函数与for 语句结合使用, 可以非常容易的读取文件.(打开->处理->关闭)

#!/usr/bin/env python
# -*- coding: utf-8 -*- import os os.getcwd()
os.chdir('../abc/chap3')
os.getcwd()
data = open('abc.txt')
print(data.readline(), end='') #打印了第一行
# 全部打印
data.seek(0) # 回到文件启始位置
for each_line in data:
print(each_line, end='')

如果文件有固定的格式,

abc : bcd

jqk : dee

我们可以用:

(role, line_spoken) = each_line.split(":")  # role = abc, line_spoken = bcd

处理异常

#!/usr/bin/env python
# -*- coding: utf-8 -*- import os os.getcwd()
os.chdir('../abc/chap3')
os.getcwd()
data = open('abc.txt')
print(data.readline(), end='') #打印了第一行
# 全部打印
data.seek(0) # 回到文件启始位置
for each_line in data:
  try:
    (role, line_spoken) = each_line.split(':',1)
   print(role, end='')
    print('said: ', end = '')
    print(line_spoken, end = '')
  except:
    pass
data.close() except IOError: # 制定异常类型.
ValueError : 数据不符合期望的格式时会出现.
IOError : 数据无法正常访问时会出现.

数据保存到文件

man = []

other = []

try:

  data = open('sketch.txt')

  for each_line in data:

    try:

      (role, line_spoken) = each_line.split(':', 1)

      line_spoken = line_spoken.strip()

      if role == 'Man':

        man.append(line_spoken)

      elif role == 'Other Man':

        other.append(line_spoken)

    except ValueError:

      pass

    data.close()

except IOError:

  print('The datafile is missing!')

print(man)

print(other)

以写模式打开文件

out = open("data.out","w")

print("asdf", file=out)

out.close()

以写模式打开文件时, 要特别注意程序失败时, 可能文件没有关闭, 文件可能就变成"脏数据"了, 为了避免这样的问题发生.

在最后加上:

finally:

  man_file.close()

  other_file.close()

如果没有出现任何运行时错误, 会执行finally组中的代码, 同样的, 如果出现 IOError, 会执行except组, 然后再运行finally.

错误的具体类型

运行时出现一个错误时, python会产生一个特定类型的异常(如IOError, ValueError等), 另外, python会创建一个异常对象, 它作为一个参数传入 except 代码组.

下面来看试图打开一个根本不存在的文件时会发生什么?

try:

  data = open('missing.txt')

  print(data.readline(), end='')

except IOError:

  print('File error')

finally:

  data.close()

错误提示信息:

File error

Traceback(most recent call last):

  File "<pyshell#8>", line 7, in<module>

  data.close()

NameError: name 'data' is not defined

文件不存在时, 数据文件对象并未创建, 这样就不可能在数据对象上调用close()方法, 所以, 最后会得到一个NameError错误.

实际上, 通过以上的方法, 并不能很好的定位到错误, 还需要分析一部, 才能看到错误的本质.

产生一个异常并由except组处理时, python解释器将一个异常对象传入这个except组, 只需做一个很小的修改就可以在代码中使用这个异常(作为一个标识符):

except IOError as_err:  # 给异常对象一个名字

  print('File error: ' + str(err))

这样做以后, 错误提示变成了:

File error: [Error 2] No such file or directory: 'missing.txt'

with

由于处理文件时 try/except/finally模式相当常用, 所以python提供一个语句来抽象出相关的一些细节, 对文件使用with语句时, 可以大大减少需要编写的代码量, 因为有了with语句就不再需要包含一个finally组来处理文件的关闭, 例如:

try:

  with open('its.txt', 'w') as data:  #使用 with 就不再使用 finally 了

    print("It's ...", file=data)

except IOError as err:

  print('File error: ' + str(err))

with 语句利用了一种名为 上下文管理协议(context management protocol) 的python技术.

永久保存数据

import pickle

with open('mydata.pickle', 'wb') as mysavedata:   # 这里的b 是告诉python以二进制模式打开数据文件.

  pickle.dump([1, 2, 'Three'], mysavedata)  # 要保存数据, 使用dump()

with open('mydata.pickle', 'rb') as myrestoredata:

  a_list = pickle.load(myrestoredata)  # 将恢复后的数据赋值给一个标识符.

print(a_list)  # 一旦数据回到程序中, 就可以像任何其他数据对象一样处理了.

综上, 程序修改

import pickle

try:

  with open('man_data.txt', 'wb') as man_file, open('other_data.txt', 'wb') as other_file:

    pickle.dump(man, man_file)

    pickle.dump(other, other_file)

except IOError as err:

  print('File error: ' + str(err))

except pickle.PickleError as perr:

  print('Picking error: ' + str(perr))

headfirst python 03, 04的更多相关文章

  1. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  2. The Python Challenge 0-4

    The Python Challenge 0-4 项目地址:http://www.pythonchallenge.com/ Level-0 提示Hint: try to change the URL ...

  3. python进阶04 装饰器、描述器、常用内置装饰器

    python进阶04 装饰器.描述器.常用内置装饰器 一.装饰器 作用:能够给现有的函数增加功能 如何给一个现有的函数增加执行计数的功能 首先用类来添加新功能 def fun(): #首先我们定义一个 ...

  4. Python模块04/包/logging日志

    Python模块04/包/logging日志 目录 Python模块04/包/logging日志 内容大纲 1.包 2.logging日志 3.今日总结 内容大纲 1.包 2.logging日志 1. ...

  5. Python函数04/生成器/推导式/内置函数

    Python函数04/生成器/推导式/内置函数 目录 Python函数04/生成器/推导式/内置函数 内容大纲 1.生成器 2.推导式 3.内置函数(一) 4.今日总结 5.今日练习 内容大纲 1.生 ...

  6. Python面向对象04 /封装、多态、鸭子类型、类的约束、super

    Python面向对象04 /封装.多态.鸭子类型.类的约束.super 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 3. 鸭子类型 4. 类的 ...

  7. python爬虫04 | 长江后浪推前浪,Reuqests库把urllib库拍在沙滩上

    最近 有些朋友 看完小帅b的文章之后 把小帅b的表情包都偷了 还在我的微信 疯狂发表情包嘚瑟 我就呵呵了 只能说一句 盘他 还有一些朋友 看完文章不点好看 还来催更 小帅b也只能说一句 继续盘他   ...

  8. python 03

    数据结构 在 python 中有4种内建数据结构, 列表, 元组, 字典和集合. 列表 list 有序项目的数据结构, 类似数组, 是对象. 列表用中括号中用逗号分隔的项目定义.例如 ['apple' ...

  9. python学习04——列表的操作

    笨办法学python第38节 如何创建列表在第32节,形式如下: 本节主要是讲对列表的操作,首先讲了 mystuff.append('hello') 的工作原理,我的理解是,首先Python找到mys ...

随机推荐

  1. 洛谷.2292.[HNOI2004]L语言(Trie DP)

    题目链接 /* 简单的DP,查找是否有字典中的单词时在Trie树上做 要注意在最初Match(0)一遍后,i还是要从0开始匹配,因为如果有长度为1的单词,Match(i+1)不会从1更新 1M=102 ...

  2. Flask的使用2

    1.Flask文件的配置 # 方式一: # 直接书写 app.config['SESSION_COOKIE_NAME'] = 'session_lvning' # 方式二: #引入setting.py ...

  3. node+koa2 向页面传值方式

    1. router.post('/form',async(ctx,next)=>{ const form = ctx.request.body; console.log('用户名:'+form. ...

  4. window 7喇叭有红叉,耳机扬声器已拔出驱动无法修复

    win7系统没声音前提是声卡驱动已经安装完全,且没有问题.Windows 7系统电脑有耳机的存在,但是还是显示扬声器耳机或耳机已拔出 ,未修复故障,首先可以百度下看下其他教程,尝试过还是不行的时候,可 ...

  5. unity小知识了解

    在搜索栏的右侧有三个按钮,单击第一个按钮,弹出相应菜单,可以根据目标类型过滤搜索结果.[按钮从左到右] 第二个按钮,提供素材标签来过滤搜索结果,可以自定义标签. 第三个按钮,提供了将搜索结果添加到前面 ...

  6. SimpleDateFormat 格式化参数说明

    字母 日期或时间元素 表示 示例 G Era 标志符 Text AD y 年 Year 1996; 96 M 年中的月份 Month July; Jul; 07 w 年中的周数 Number 27 W ...

  7. js获取浏览器版本信息整理

    一.Navigator 对象 JavaScript Navigator 对象包含了有关访问者浏览器的所有信息.接下来我们学习 Navigator 对象的两个属性. appName 保存浏览器类型 ap ...

  8. Error-MVC:HTTP Error 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。

    ylbtech-Error-MVC:HTTP Error 500.19 - Internal Server Error  无法访问请求的页面,因为该页的相关配置数据无效. 1.返回顶部 1. IIS ...

  9. android 异常:ScrollView can host only one direct child

    android 采用ScrollView布局时出现异常:ScrollView can host only one direct child. 主要是ScrollView内部只能有一个子元素,即不能并列 ...

  10. IOPS计算

    Device Type IOPS 7,200 rpm SATA drives HDD ~75-100 IOPS[2] 10,000 rpm SATA drives HDD ~125-150 IOPS[ ...