文件与异常

到目前为止已经了解了如何处理数据,显示数据那么如何向程序传入数据

创建文件夹HeadFirstPython/chapter3 下载演示文件

wget http://python.itcarlow.ie/chapter3/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!

从标准库导入os

>>> import os
>>> os.getcwd()
‘/server/scripts/HeadFirstPython/chapter3‘ #显示当前目录

>>> data = open(‘sketch.txt‘)    #打开文件,将文件赋至一个名为data的文件对象
>>> print(data.readline(),)    #使用readline() 方法从文件获取一个数据行,使用print打印  
Man: Is this the right room for an argument?

>>> print(data.readline(),)
("Other Man: I‘ve told you once.\n",) #再读取一行

>>> data.seek(0)                      #使用seek()方法返回文件其实位置
>>> print(data.readline(),)
(‘Man: Is this the right room for an argument?\n‘,)

>>> for each_line in data:   #使用标准迭代输出数据,这里输出省略
...    print each_line

data.close()                       #最后不要忘记关闭

>>> data = open(‘sketch.txt‘)
>>> for each_line in data:
...    (role,line_spoken) = each_line.split(‘:‘)
...    print (role,)
...    print (line_spoken,)

前面后面出现了ValueError错误

注意到处错误的哪一行有两个:号所以split把这一行分了3个部分,抱怨值过多了

help(each_line.split)

split(...)
S.split([sep [,maxsplit]]) -> list of strings

Return a list of the words in the string S, using sep as the
delimiter string. If maxsplit is given, at most maxsplit
splits are done. If sep is not specified or is None, any
whitespace string is a separator and empty strings are removed
from the result.

可以在分割的时候指定参数分割为两行即可

为了方便建立一个脚本

sketch.py

data = open(‘sketch.txt‘)
for each_line in data:
  (role,line_spoken) = each_line.split(‘:‘,1)
  print (role,)
  print (line_spoken,)

还是会出错

ValueError: need more than 1 value to unpack

检查数据发现有几行是没有:的所以出错了

要处理大量意外情况,最好的办法是增加额外的逻辑来进行处理,如果有更多担心的问题就需要更多的代码

或者可以允许这些错误的发生,然后在错误发生的时候处理相应错误

那一种方法更好呢

使用find方法可以让find找到一个字符串中的子串

each_line = "I am liuyueming"

>>> each_line.find(‘a‘)
2

>>> each_line.find(‘w‘)
-1

如果找到返回出现在第几位,否则返回-1

修改代码

data = open(‘sketch.txt‘)
for each_line in data:
  if not each_line.find(‘:‘) == -1:
    (role,line_spoken) = each_line.split(‘:‘,1)
    print (role,)
    print (‘said:‘,)
    print (line_spoken,)
data.close()

输出正确了没有错误提示,但是假如文件格式改变了还会有其他问题,又需要修改代码了

在Python里面运行错误叫异常,可以通过try/expect机制跳过异常

data = open(‘sketch.txt‘)
for each_line in data:
#if not each_line.find(‘:‘) == -1:
  try:
    (role,line_spoken) = each_line.split(‘:‘,1)
    print (role,)
    print (‘said:‘,)
    print (line_spoken,)
  except:
    pass
data.close()

PS:pass代表什么也不做,try和expect之间就是要保护的代码,假如需要忽略特定错误比如ValueError可以把这个参数加在expect后面

时间: 2024-08-08 17:03:56

文件与异常的相关文章

Android学习——R文件丢失异常原因汇总

Console报错:R.java was modified manually! Reverting to generated version! 引言: R文件丢失异常在java开发中是个比较常见的异常,造成这个异常的原因可能非常微小,但是给Android开发者们造成的麻烦可是巨大的,当程序员们费尽千辛万苦,找到自己错在哪里的时候,绝对会对自己的粗心大意而捶胸顿足,哀叹不已. 异常提示: R.java was modified manually! Reverting to generated ve

R文件丢失异常原因汇总

引言: R文件丢失异常在java开发中是个比较常见的异常,造成这个异常的原因可能非常微小,但是给Android开发者们造成的麻烦可是巨大的,当程序员们费尽千辛万苦,找到自己错在哪里的时候,绝对会对自己的粗心大意而捶胸顿足,哀叹不已. 异常提示: R.java was modified manually! Reverting to generated version! 或者项目中gen目录下没有生成R文件,运行项目的时候会报错 我的错误: 最近一次我出现这个错误是因为新电脑中的Eclipse中指向

萌新向Python数据分析及数据挖掘 第一章 Python基础 第十节 文件和异常

第一章 Python基础 第十节 文件和异常 从文件中读取数据 读取文件.文件路径   1 filename = 'pi_digits.txt' #文件名取个代号 2 #读取整个文件 3 with open(filename) as file_object: 4 contents = file_object.read()# 给内容取个代号 5 print(contents.rstrip()) 6 #逐行读取 7 with open(filename) as file_object: 8 for

第 10 章 文件和异常

至此,我们掌握了编写组织有序而易于使用的程序所需的基本技能,该考虑让程序目标更明确,用途更大了.在本章中,我们将学习处理文件,让程序能够快速地分析大量的数据:我们将学习错误处理,避免程序在面对意外情形时崩溃:我们将学习异常,它们是Python创建的特殊对象,用于管理程序运行时出现的错误:我们还将学习模块json,它让我们能够保存用户数据,以免在程序停止运行后丢失. 学习处理文件和保存数据可以让我们的程序使用起来更容易:用户将能够选择输入什么样的数据,以及在什么时候输入:用户使用我们的程序做一些工

第十章文件和异常

#1. #A:使用关键字with后,会在不需要访问文件后将其关闭 #B:open(),默认以"r"的形式打开文件,close()分别用于关闭文件 #C:读取文件的方法:read()默认读取整个文件,可以指定读取字节.readline()读取一行,readlines()按行读取后存入列表,当传入读取字节数目后,则读取的内容可能是行的一部分 #D:python3将文件当做一个可迭代的类型,此方法比较好 #E:seek()设置开始读的位置, tell()得到当前开始读取位置 #Test.tx

《Python编程从入门到实践》_第十章_文件和异常

读取整个文件 文件pi_digits.txt #文件pi_digits.txt 3.1415926535 8979323846 2643383279 下面的程序打开并读取整个文件,再将其内容显示到屏幕中: with open("pi_digits.txt") as fileobject: contents = fileobject.read() print(contents) #运行结果 3.1415926535 8979323846 2643383279 使用函数open()打开文件

Head First Python 第二章 函数模块&第三章 文件与异常&第四章 持久存储&第五章 处理数据

第三章 1.共享模块 模块和发布工具箱全世界共享模块 编写函数,以.py为文件后缀名,第三方库都在PyPI *注释代码:三引号(单双都可以) 发布过程P40 使用发布工具,函数模块变成了一个“发布”,可以使用import导入其他程序 2.如果函数模块功能不满意 添加参数以供api选择比添加函数工作量小! 首先考虑BIF内置函数 ----------------------------------------------------------- 第四章 1.文件 open()语句,readlin

Head First Python学习笔记2——文件与异常

文件处理 1.用open()就可以打开文件,但是请注意:文件里有中文请设置编码,如 :open("filepath","r",encoding="utf-8")本书没有说明这个,结果我输出的都是乱码,在网上找了好久才发现解决方法.第二个参数是文件读写模式,详细请看下面  'r'       打开读取文件(默认)    'w'      打开写入文件,会先清除文件内容    'x'       创建一个新文件不打开写入    'a'       如

class 10 文件和异常

掌握了编写组织有序而易于使用的程序所需的基本技能,该考虑让程序目标更明确,用途更大.本章中,将学习处理文件,让程序能够快速地分析大量的数据:我们将学习错误处理,避免程序在面对意外情形时崩溃:我们将学习异常,它们是Python创建的特殊对象,用于管理程序运行时出现的错误:我们还将学习模块json,它让我们能够保存用户数据,以免在程序停止运行后丢失. 学习处理文件和保存数据可以让我们的程序使用起来更容易:用户将能够选择输入什么样的数据,以及在什么时候输入:用户使用我们的程序做一些工作后,可将程序关闭