笔记:HeadFirstPython(3)文件与异常

目标:学习读取文本文件,学习Python中的异常机制,使程序更健壮,容错性更好。

一、打开并读取文本文件

使用Python的open() BIF来打开文件,Python在使用完文件后要关闭文件。

the_file = open('sketch.txt')
#文件读取代码
the_file.close() #关闭文件

本章会用到一个文本文件做实例,这个文件可以在这里下载到。

通过os模块中的,os.getcwd()获取当前工作目录,通过os.chdir('目录')改变当前工作目录。

可使用文件对象的readline()函数读取文本文件的一行,这里注意读取时会将换行符也一起读取,所以在使用print输出时要使用end=""参数,否则会多输出一行。也可以使用for...in循环来读取文本文件的每一行。使用文件对象的方法seek(0)来讲读写文件指针移动到文件起始位置。使用tell()方法可获得读写指针当前位置。

#读取文件实例
>>> data=open('D:\PythonProject\FirstHeadPython\chapter3\sketch.txt') 
#如果不使用绝对路径,可以用os.chdir(目录)改变当前工作目录到sketch.txt文件所在目录后在打开文件。
>>> data.readline()
"Man: Is this the right room for an argument?\n"  #readline()获得的字符串末尾有\n
>>> print(data.readline(),end='')
Other Man: I've told you once.  #如果上面的print语句没有使用end=''参数的话,下面会多出一个空行。
>>> data.seek(0)  #返回文件起始位置
0
>>> for each_line in data:  #循环获取文件所有行
        print(each_line,end="")

Man: Is this the right room for an argument?
Other Man: I've told you once.

..........中间太长省略..................

(pause)
Other Man: No it isn't!
Man: Yes it is!
>>> data.close()  #关闭文件。

二、字符串处理函数

当需要查看一个方法的使用帮助时,可以在python shell中使用内置函数help(对象.方法)来找到帮助。

  1、字符串的split()方法分隔字符串,可以多重复值。

oneline="Man: Is this the right room :for an argument?\n"
(role,line_spoken)=oneline.split(":",1) 
#将oneline根据符号:进行分割,然后分别赋值给role和line_spoken,而且只分割一次,第二个“:”号会被忽略。

 当进行多重赋值时,变量列表的数量要确保和返回结果数量一致,无论多或者少都会出错。

 2、字符串对象的去除两边空字符的方法,lstrip()去除左边空字符,rstrip()去除右边空空字符,strip()去除两边空字符。注意:这里空字符包括了空格、制表符、回车、换行等。如果需要定制去除哪些字符,可以使用参数,例如:strip(" \n"),这里\符号前面有个空格,表示去除字符串两边的空格和换行字符。这时候如果字符串开头或末尾有制表符\t,就会当做正常字符处理。

3、在字符串中查找子串位置方法find(子串),返回-1表示没有包含子串,如果找到子串就返回子串第一个字符在字符串中的位置(从0开始)。

三、Python中的布尔表达式符号

== 等于、!=不等于、>大于、<小于、<=小于等于、>=大于等于

四、异常处理机制

try:
    #可能会有运行时错误的代码
except[ 错误类型1]:
    #错误处理代码
[except[ 错误类型2]:
    #错误2处理代码    ]
else:
    #如果没有捕获错误时代码

如果错误处理可以忽略,那么错误处理代码可以用pass语句。个人认为pass语句能不用就不用,在实际工作中,如果某处可能有异常发生异常,那么你至少在错误处理代码部分做个日志记录。除非你知道某个语句一定会有异常,但是这个异常不需要处理,也没有记录的意义,那么这时候才用pass

一个实例,是参考了其他资料的,HeadFirstPython里的例子实在是太简单,要到后面章节才会进一步展开,感觉太散先提前放过来。

try:  
    x = int(input('input x:'))  
    y = int(input('input y:'))  
    print('x/y = ',x/y)  
except ZeroDivisionError: #捕捉除0异常  
    print("ZeroDivision")  
except (TypeError,ValueError) as e: #捕捉多个异常  
    print(e)  
except: #捕捉其余类型异常  
    print("it's still wrong")  
else:  #没有异常时执行  
    print('it work well')  
finally: #不管是否有异常都会执行  
    print("Cleaning up")

这里要吐槽一下HeadFirstPython,这书可以让初学者容易看进去,但是实在太表面,学过编程的人看,会觉得太浅。

另外,因为这本书用的是Python3版本,所以网上查资料的时候应该查python3,如果只查python可能会查到python2的内容,python2和python3有些地方是不同的。

你可能感兴趣的:(笔记:HeadFirstPython(3)文件与异常)