目标:学习读取文本文件,学习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有些地方是不同的。