目录
文件
文本文件的读取和写入
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'])
文本文件的读取
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())
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)