文件基本操作

Python从文本读取数据时,一次会到达一个数据行。

sketch.txt文件

Man: Is this the right room for an argument?
Other Man: I've told you once.
Man: No you haven't!
Other Man: Yes I have.
Man: When?
Other Man: Just now.
Man: No you didn't!
Other Man: Yes I did!
Man: You didn't!
Other Man: I'm telling you, I did!
Man: You did not!
Other Man: Oh I'm sorry, is this a five minute argument, or the full half hour?
Man: Ah! (taking out his wallet and paying) Just the five minutes.
Other Man: Just the five minutes. Thank you.
Other Man: Anyway, I did.
Man: You most certainly did not!
Other Man: Now let's get one thing quite clear: I most definitely told you!
Man: Oh no you didn't!
Other Man: Oh yes I did!
Man: Oh no you didn't!
Other Man: Oh yes I did!
Man: Oh look, this isn't an argument!
(pause)
Other Man: Yes it is!
Man: No it isn't!
(pause)
Man: It's just contradiction!
Other Man: No it isn't!
Man: It IS!
Other Man: It is NOT!
Man: You just contradicted me!
Other Man: No I didn't!
Man: You DID!
Other Man: No no no!
Man: You did just then!
Other Man: Nonsense!
Man: (exasperated) Oh, this is futile!!
(pause)
Other Man: No it isn't!
Man: Yes it is!

需求:读取文件,将上面的对话都加上said

代码如下:

# coding:utf-8
import os # 查看当前工作目录
print(os.getcwd())
# 切换为包含数据文件的文件夹
os.chdir('../../HeadFirstPython/chapter03_except')
# 再次查看当前工作目录
print(os.getcwd()) # 打开文本
data = open('sketch.txt')
# 获取一个数据行,打印
print(data.readline(), end='')
# 再次获取一个数据行,打印
print(data.readline(), end='') # 回到文件原始位置
data.seek(0)
# data.tell() # 等价
for each_line in data:
# 当每一行都存在冒号时,执行if中的操作
if not each_line.find(':') == -1:
# 遇到冒号就切割字符串,返回一个字符串列表,赋至一个目变量元组,则称为多重赋值
# 由于一行字符串中可能有多个: 所以我们需要在使用split方法maxsplit参数
(role, line_spoken) = each_line.split(":", 1)
print(role, end='')
print(' said:', end='')
print(line_spoken, end='') # 关闭文件
data.close()

但是这段代码过于脆弱,但文件格式发生变化或者其他异常情况,还是出问题,这时需要用到异常机制。

处理异常

try/except机制

# coding:utf-8

# 如果文件不存在,异常处理
try:
data = open('sketch.txt')
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,继续执行代码
pass
data.close()
# 想要捕捉特性的异常,需要制定错误类型
except IOError:
print("the data file is missing!")
# 其他所有的异常
except:
print("the data file is broken!")

  

其他:

判断文件是否存在:

os.path.exists('sketch.txt')

Head First Python之3文件与异常的更多相关文章

  1. python学习二(文件与异常)

    Python中使用open BIF与文件交互,与for语句结合使用,一次读取一行 读取文件sketch.txt,文件内容如下: Man: Ah! (taking out his wallet and ...

  2. python进阶(7)--文件与异常

    一.文件读取二.文件写入三.异常四.存储数据 ---------------------------------------分割线:正文-------------------------------- ...

  3. Python的文件及异常

    1. Python的文件及异常 1.1 文件操作 1.1.1 从文件中读取数据 许多情况下,我们的信息是存储在文本中的.例如对用户行为的分析,用户访问系统或者网站的访问信息会被存储于文本中,然后对文本 ...

  4. python入门学习:9.文件和异常

    python入门学习:9.文件和异常 关键点:文件.异常 9.1 从文件中读取数据9.2 写入文件9.3 异常9.4 存储数据 9.1 从文件中读取数据 9.1.1 读取整个文件  首先创建一个pi_ ...

  5. [Python 从入门到放弃] 6. 文件与异常(二)

    本章所用test.txt文件可以在( [Python 从入门到放弃] 6. 文件与异常(一))找到并自行创建 现在有个需求,对test.txt中的文本内容进行修改: (1)将期间的‘:’改为‘ sai ...

  6. Python模块、包、异常、文件(案例)

    Python模块.包.异常.文件(案例) python.py #模块 # Python中的模块(Module),是一个Python文件,以.py文件结尾,包含了Python对象定义和Python语句, ...

  7. Python获得文件时间戳 异常访问监控 邮件定时提醒

    Python获得文件时间戳  异常访问监控 邮件定时提醒

  8. Python之文件和异常IO

    文件和异常 读写文本文件 读取文本文件时,需要在使用open函数时指定好带路径的文件名(可以使用相对路径或绝对路径)并将文件模式设置为'r'(如果不指定,默认值也是'r'),然后通过encoding参 ...

  9. 【Python编程:从入门到实践】chapter10 文件和异常

    chapter10 文件和异常 10.1 从文件中读取数据 10.1.1 读取整个文件 with open("pi.txt") as file_object: contents = ...

随机推荐

  1. Python handling an exception

    #try...except... try: You do your operations here; ...................... except ExceptionI: If ther ...

  2. javascript slice array to num subarray

    var data = ['法国','澳大利亚','智利','新西兰','西班牙','加拿大','阿根廷','美国','0','国产','波多黎各','英国','比利时','德国','意大利','意大利 ...

  3. GIL与线程、进程、协程

    GIL全局解释器锁: 1.相信大家都知道python代码是不能直接被机器cpu识别和执行的,它要经过python解释器(也就是我们执行时候的python3 name.py)被编译成机器语言,pytho ...

  4. leetcode746

    class Solution { public: int minCostClimbingStairs(vector<int>& cost) { vector<); totol ...

  5. 设置Eclipse中的tab键为4个空格

    在工具栏上找到window,点击 window->preference 然后在打开的界面中选择 General->Editors->Text Editors, 再选中右侧的 inse ...

  6. 如何将查出的日期Data类型以Json格式输出到前端

    方法一 在返回的实体的属性中加上注解 // 创建时间    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")    private ...

  7. MyBatis 学习记录3 MapperMethod类

    主题 之前学习了一下MapperProxy的生产过程,自定义Mapper类的对象是通过动态代理生产的,调用自定义方法的时候实际上是调用了MapperMethod的execute方法:mapperMet ...

  8. iOS学习之自定义弹出UIPickerView或UIDatePicker(动画效果)

    前面iOS学习之UIPickerView控件的简单使用 用到的UIPickerView弹出来是通过 textField.inputView = selectPicker;   textField.in ...

  9. C#中使用OracleTransaction

    1. OracleTransaction类的概述(from msdn )        应用程序通过针对OracleConnection对象调用 BeginTransaction 来创建OracleT ...

  10. 平衡二叉树之RB树

    RB树(红黑树)并不追求“完全平衡”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能.由于它的设计,任何不平衡都会在三次旋转之内解决.典型的用途是实现关联数组(如C++中的map和s ...