Python 文件和异常处理

目录

文件

文本文件的读取和写入

文本文件的写入

 文本文件的读取

 文本文件的编码

二进制文件的读取和写入

二进制文件的写入

 二进制文件的读取

随机文件访问

创建或打开随机文件

定位

随机文件读写示例

 异常处理


文件

文本文件的读取和写入

1.创建或打开文件对象:

通过open()函数可以创建或打开python文件对象。

f1 = open('data1.txt', 'w') 创建或打开data1.txt文件。如果不存在data1.txt,自动创建。

f2 = open('data2.txt', 'x') 创建data2.txt文件。如果该文件已经存在,则导致FileExistsError。

f3 = open('data3/txt', 'a') 创建或打开data3.txt文件。附加模式。

2.文本文件的关闭:

通过f.close()方法关闭文件,释放资源,以保证数据不会流失。

3.with语句:

使用with语句可以自动关闭打开的文件。

with open('data1.txt', 'w') as f:

文本文件的写入

通过open函数打开文件后,可以使用实例方法write()或writelines()来对文件进行写入。

f.write(s):把字符串s写入文件f中。

f.writelines(lines):依次把列表lines中的各个字符串写入文件f。

f.flush():强制把缓冲区的数据更新到文件中。

特殊地,write()和writelines()不会自动添加换行,可以通过\n来手动换行。

with open('data1.txt', 'w') as f:
    f.write("hello\n")
    f.writelines(['abc\n', '123\n'])

Python 文件和异常处理_第1张图片

 文本文件的读取

1.打开文件对象:

f1 = open('data1.txt', 'r')        :打开文件data1.txt。如果文件不存在,会导致FileNotFoundError。

2.读取数据:

文件的读取通过实例f.read()和f.read(n)来实现。

f.read()        :从文件f中读取所有内容,返回一个字符串。

f.read(n)        :从文件f中最多读取n个字符,返回一个字符串。如果n为负数或为None,读取至文件末尾。

f.readline()        :从文件f中读取一行内容,返回一个字符串。

f.readlines()        :从文件f中读取剩余的多行内容,返回一个列表。

with open('data1.txt', 'r') as f:
    print(f.readline())
    print(f.readlines())
    

Python 文件和异常处理_第2张图片

 3.文本文件的迭代:

文件可以直接迭代

with open('data1.txt', 'r') as f:
    for i in f.readlines():
        print(i, end="")

 文本文件的编码

python内置的编码包括utf-8、utf8等。在创建或打开文本文件时,可以指定文件名、可以指定打开方式、也可以指定文件编码。比如:

with open('data1.txt', mode='r', encoding='utf-8') as f:
    for i in f.readlines():
        print(i, end="")

二进制文件的读取和写入

在使用open函数打开或创建一个文件时,可以指定打开方式为‘b',以打开二进制文件。文本文件适用于存储编码的字符串。二进制文件适用于直接存储字节码。

二进制文件的写入

1.打开或关闭文件对象:

通过open()函数来实现。

f1 = open('data1.txt', 'wb')        :创建或打开文件

f1 = open('data1.txt', 'xb')        :创建data2.txt文件。如果该文件已经存在,则导致FileExistsError。

f1 = open('data1.txt', 'ab')        :创建或打开data3.txt文件。附加模式。

2.二进制文件的写入:

通过实例write或flush来实现。

with open('data1.txt', mode='wb') as f:
    f.write(b'123')
    f.write(b'abcd')

 二进制文件的读取

1.打开文件对象

f1 = open('data1.txt', 'rb')

2.读取数据

f.read()

f.read(n)

f.readinto(b)        :从文件f中最多读取len(b)个字节到bytes对象b中。

with open('data1.txt', mode='rb') as f:
    print(f.read)

随机文件访问

文件操作中,read()和write()都属于顺序存取,只能按顺序从头到尾的进行读写。实际上我们可以只访问文件中我们需要的部分。

文件对象支持seek()方法,seek()通过字节偏移量将读取或写入位置移动到文件中的任意位置,从而实现文件的随机访问。

seek()函数的第一个参数表示移动的字节偏移量。第二个参数表示相对参考点(文件开始位置、中间位置、结束位置)。

创建或打开随机文件

随机文件一般同时提供读写操作,如:

f = open('data1.txt', 'w+b')        

f = open('data1.txt', 'w+b')

f = open('data1.txt', 'w+b')

f = open('data1.txt', 'w+b')

定位

在打开文件后,通过实例方法seek来实现定位功能。如:

f.seek(-3,2)表示读写位置移动到倒数第三个字符位置。

随机文件读写示例

import os
with open('data1.dat', 'w+b') as f:
    f.seek(0)
    f.write(b'hello')
    f.seek(-5, os.SEEK_END)
    b = f.read(5)
    print(b)

 异常处理

通过异常处理,以实现:在程序运行过程中,如果产生错误,将抛出异常。通过try语句来定义代码块,以运行可能抛出异常的代码。通过except语句可以捕获特定的异常并执行相应的处理。通过finally语句可以保证即使产生异常,也可以在事后清理资源。

基本格式:

try:
except:
else:
finally:

首先,try从句(在关键字try和except之间的语句)被执行。

如果没有异常发生,except从句被跳过,try语句执行完毕。

如果在执行try语句的时候有异常发生,剩余的语句会被跳过。如果它的类型和except后面的命名异常相匹配,这个except从句被执行,然后在try语句后面继续执行。

如果有异常发生,并且它和except从句中的命名异常类型不匹配,它被传递到外层的try语句,如果没有发现处理程序,它就是一个未处理的异常,程序停止执行,显示上面的错误信息。

特别地,一个try语句或许有多个except从句

可选的else从句,如果有的话必须跟在所有的except从句后面

引发异常:

python允许用户自己抛出异常。引发异常语句:raise

比如:

if a <0 :
        raise ValueError(“数值不能为负数”)

捕获异常的顺序:

python中所有的异常都派生于Exception。所以用户需要将带有具体的(派生程度最高的)异常类的except模块放在最前面。

自定义异常类示例:

class MyError(Exception):
    def __init__(self, n):
        self.x = n

    def __str__(self):
        return self.x


try:
    raise MyError('类型错误')
except MyError as me:
    print('发生错误', me.x)

你可能感兴趣的