python之文件和异常

从文件读取数据

读取整个文件

首先需要打开文件,使用函数open()打开文件,参数为要打开文件的名称(或者相对文件路径或绝对文件路径),pyhton在当前执行的文件所在的目录中查找指定的文件,因此要打开的文件应该放在当前文件的目录里。函数open返回一个表示文件的对象,将这个对象存在file_object中。(还记得C++打开文件的文件指针吗)

with关键字在不再需要访问文件后将其关闭,这比直接使用close函数要好,因为1 如果程序出现bug,导致close语句未执行,文件就不会关闭。2 过早的调用了close,后面再使用文件时就会出现错误(无法访问),所以不能很好的确定关闭文件的正确时机,使用with可以让python自己判断自动再合适的时机关闭

1
2
3
with open("要打开文件的名称") as file_object:
contents = file_object.read() #拥有文件对象后,调用read方法
print(contents) #print(contents.rstrip())删除空行

打印结果会多一个空行,因为read函数到达文件末尾时返回一个空字符串,将这个空字符串显示出来就是一个空行,要删除多余的空行,使用rstrip()
ATTENTION:在使用文件路径时,OS和linux采用/斜杠,windows采用\反斜杠

逐行读取

使用for循环遍历文件中的每一行,同样直接打印的话,每一行都有一个换行符,使用rstrip删除空行

1
2
3
with open("要打开文件的名称") as file_object:
for line in file_object:
print(line) #print(line.rstrip())删除空行
创建一个包含文件各行内容的列表

使用with关键字时,open返回的文件对象只在with代码中使用,如果想在with代码块外访问文件内容,可以在with代码块内将文件的各行存储在一个列表中,这样就可以在代码块外使用这个列表了。

1
2
3
4
5
with open("要打开文件的名称") as file_object:
lines = file_object.readlines() #从文件中读取每一行,并把它存储在一个列表中

for line in lines:
print(line.rstrip())
使用文件内容

使用文本文件时,pyhton将其中的所有文本解读成字符串,如果读取的是数字,需要作为数值使用,就必须使用int函数将其转换为整数或者float将其转化为浮点数

f.readline() vs f.readlines()

readlines一次读入所有数据进内存,readline一行一行读,大数据用readline

io模块和codecs模块可以指定编码,读取中文文件需要指定utf-8编码:

import io
io.readlines(filename, ‘r’, encoding=’utf-8’)

读取二进制文件

f.readline(filename, ‘rb’)

写入文件

写入空文件

调用open函数提供两个实参,第一个是要打开文件的名称,第二个是以写入模式(‘w’)打开文件,另外还有读取模式(‘r’)附加模式(‘a’)以及这几种的混合模式,,省略第二个实参默认只读模式打开文件,如果写入文件不存在,open函数会自动创建。以写入模式打开文件需要注意,如果指定文件已经存在,python将在返回文件对象前清空该文件。

1
2
with open(filename, 'w') as file_object:
file_object.write("I love programming")

注意:python只能将字符串写入文本文件,要将数值数据存储到文本文件中,必须使用函数str()将其转化为字符串格式

写入多行

函数write()不会在写入的文本末尾添加换行符,因此写入多行时会挤到一起,因此在write语句中增加换行符,保证文件中的内容能够显示在不同行

附加到文件

以附加方式打开文件,python不会在返回文件对象前清空文件,写入文件的行都将添加到文件末尾,是给文件添加内容,而不是覆盖原有的内容,如果文件不存在将创建一个空文件

异常

每当发生python错误时,都会创建一个异常对象,如果不对异常进行处理,程序就会停止,并显示一个traceback。异常是使用try-except代码块处理的。

处理ZeroDivisionError异常

对除0异常进行处理

1
2
3
4
try:
print(5/0)
except ZeroDivisionError:
print("U cannt divide by zero")
处理FileNotFoundError异常

使用文件时,找不到文件就会出现FileNotFoundError异常,这是python找不到要打开的文件时创建的异常,这个错误时open函数导致的,要处理这个错误,必须把try放到包含open函数的代码行之前。

pass语句什么都不做

正确的使用异常很多时候也靠项目经验,但是正确处理异常现象非常重要,比如上面打开文件的错误异常,在实际项目中严谨的代码是要处理这个异常的。尽量编写优雅的代码,经过详尽测试的不容易出现内部错误的代码,丰富的项目经验可以让我们判断出程序在哪里会出现异常以及出现错误时应该向用户提供哪些相关信息

其他异常

NameError —–尝试访问一个没有申明的变量
SyntaxError——语法错误
IndexError ——索引超出序列范围
KeyError ——请求一个不存在的字典关键字
AttributeError—–尝试访问未知的对象属性
ModeuleNotFoundError—–模块未发现
IndetationError —–缩进错误

休息一下,喝杯咖啡,继续创作