Python学习——文件操作和异常处理

文件的读写
1.函数open()接受一个参数:要打开的文件名称,并返回一个表示文件的对象
1)文件路径
相对文件路径
绝对文件路径
linux/OS X 文件路径中使用斜杠(/) 如file_path = '/home/filename.txt'
Windows 文件路径中使用反斜杠(\) 如file_path = 'C:\Users\filename.txt'
2.关键字with在不再需要访问文件后将其关闭。
3.也可以用open()和close()来打开和关闭文件,但如此做当程序存在bug,close()语句未执行时,文件将不会正常关闭。
4.读取文件
1)方法read()可以读取文件的全部内容,将其作为一个长字符串存储,当read()到达文件末尾是返回一个空字符串,显示出来是一个空行。要删除多出来的空行,可以是使用方法rstrip()
2)逐行读取
可使用for循环,注意这里每行的末尾都有换行符,可以使用方法rstrip()清除
for line in file_object:
print(line)
可使用方法readlines(),从文件中读取每一行,并将其存储在一个列表中,在with代码块外仍可使用
lines = file_object.readlines()
5.写入文件 
1)写入文件时,调用open()要提供另一个实参,告诉Python你要写入打开的文件,第二个参数说明了打开文件的模式:'w': 写入模式,'r': 读取模式, 'a': 附加模式, 'r+':读取和写入模式
省略模式实参则默认以只读方式打开
×××特别注意,以写入模式打开文件时,如果指定的文件已经存在,Python将在返回文件对象前清空该文件
with open(filename, 'w') as file_object:
file_object.write("Hello World!")
2)添加内容
只想给文件添加内容,而不覆盖原有内容,可以以附加模式打开文件
异常的处理
Python使用被称为异常的特殊对象来管理程序执行期间发生的错误。每当发生错误时,它都会创建一个异常对象,若编写了处理该异常的代码,程序将继续运行,否则程序将停止,并显示一个traceback
其中包含有关异常的报告
1)try-except-else代码块
若try代码块中的代码运行起来没有问题,python将跳过except代码块;否则python将查找except代码块,并进行处理。而依赖于try代码块成功执行的代码都放在else代码块中。
如果出现错误时,对错误不进行任何处理,可使用pass语句,pass还充当了占位符,提醒你程序的某个地方还什么都没做,以后也许要添加些代码
常见异常如: FileNotFoundError, ZeroDivisionError,ValueError
下面是练习用的两个文件操作和异常处理的小程序
# title = "Alice in Wonderland"
# print(title.split())      方法split()将以空格为分隔符将字符串拆分成多个部分,并存储于一个列表中
def count_words(filename):
''' count how many words in a text file '''
try:
with open(filename) as f_obj:
contents = f_obj.read()
except FileNotFoundError:
pass
#msg = "Sorry, the file " + filename + " does not exist."
#print(msg)
else:
words = contents.split()
print("The file " + filename + " has about " + str(len(words)) + " words.")
def addTwoNumber():
''' add two numbers. '''
first_number = input("First Number: ")
second_number = input("Second Number: ")
try:
first_number = int(first_number)
second_number = int(second_number)
except ValueError:
print("Please check if your input is legal.")
return False
else:
res = first_number + second_number
print(str(first_number)+" + "+str(second_number)+" is "+str(res))
return True