一、文件操作
1.1 打开和关闭文件
Python open() 方法用于打开一个文件,并返回文件对象。
在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。
打开已存在的文件:
使用r打开可读,写报错io.UnsupportedOperation: not writable
使用w打开可写,读报错io.UnsupportedOperation: not readable
打开不存在的文件
使用r打开报错FileNotFoundError: [Errno 2] No such file or directory: ‘xxx.xxx’
使用w打开会新建文件
下面通过代码分别演示上面的示例。
# 1.1 用只读模式打开已存在的文件 file = open("a.txt", "r") # a.txt文件内容是123 content = file.readline() # 读不会报错 print(content) file.write("321") # 写会报错 io.UnsupportedOperation: not writable file.close()
# 1.2 用只写模式打开已存在的文件 file = open("a.txt","w") file.write("123") # 写不会报错 content = file.readline() # 读会报错 io.UnsupportedOperation: not readable file.close()
# 2.1 用只读模式打开不存在的文件 file = open("b.txt","r") # 报错 FileNotFoundError: [Errno 2] No such file or directory: 'b.txt' file.close()
# 2.2 用只写模式打开不存在的文件 file = open("b.txt","w") file.write("123") file.close()
Python close() 方法用于关闭文件。关闭后文件不能再进行读写操作。
文件IO要及时关闭,防止其他应用程序无法使用这个文件。
1.2 读写文件
- read()方法读取: 读取指定个数数据,读完后指针移动到最后读取的数据后
- readline()方法读取:默认读取一行,也可以读取指定数据
- readlines()方法读取:读取文件的全部数据
a.txt文件里的内容如下:
依次使用上面三种方法读取:
# 1.read() print("1.使用read方法读取文件:") f = open("a.txt", "r") content = f.read(5) # 读5个字符,读完后光表移到了第五个字符后面 print(content) content = f.read(5) # 从第5个字符开始读 print(content) f.close() print() # 2.readline() 读取一行,或读取指定个数的字符 print("2.使用readline方法读取文件:") f = open("a.txt", "r") primary = f.readline() print(primary, end="") primary = f.readline(5) # 读取5个字符 print(primary) f.close() print() # 3.readlines() # 以列表的形式,每一行的数据作为一个列表元素,读取全部文件 print("3.使用readlines方法读取文件:") f = open("a.txt", "r") content = f.readlines() print(content) i = 1 for con in content: print("第%d个元素:%s" % (i, con), end="") i += 1 f.close()
二、异常处理
2.1 异常处理格式
Python 有两种错误很容易辨认:语法错误和异常。
语法错误是在程序允许前被Python语法分析器检测出来的。
运行期检测到的错误被称为异常。
根据上面的例题,用只读 r 打开一个不存在的文件是将发生FileNotFoundError
下面通过处理这个异常来演示Python异常处理的格式。
(1)处理单个异常
# 用只读模式打开不存在的文件,处理异常 try: file = open("b.txt","r") # 报错 FileNotFoundError: [Errno 2] No such file or directory: 'b.txt' file.close() except FileNotFoundError: print("出错了") pass
(2)处理多个异常
try: print(name) # name未定义将发生nameError f = open("b.txt", "r") # b.txt不存在将发生FileNotFoundError except (NameError, FileNotFoundError) as ex: # 定义异常对象ex用于获取异常信息 print(ex) pass
(3)try——except——finally使用
先看下面的代码:
try: f = open("b.txt","r") # FileNotFoundError except FileNotFoundError as ex: print(ex) # 打印异常信息 finally: f.close()
代码中的 f 是局部变量,finally语句中肯定不能使用f,所以会报NameError。
将代码加以改进:
import time try: f = open("b.txt", "r") # FileNotFoundError try: while True: content = f.readline() if len(content) == 0: break time.sleep(2) # 让代码停顿两秒 print(content) finally: f.close() print("关闭文件") except FileNotFoundError as ex: print(ex) # 打印异常信息
打开a.txt 文件:
2.2 File+Error例题
定义两个函数,分别完成读和写功能
要求将poetry.txt文件内容复制到copy.txt文件中。
# 读操作 def read(): strs = "" # 结果串 flag = True try: file = open("poetry.txt", "r") # 文件可能不存在 try: while True: content = file.readline() if len(content) == 0: break strs += content finally: file.close() except FileNotFoundError as ex: print(ex) flag = False pass return strs, flag # 写操作 def write(strs): f = open("copy.txt", "w") f.write(strs) f.close() # 执行方法 try: strs, flag = read() write(strs) if flag: print("copy successfully") else: print("copy failure") except Exception as ex: print(ex) pass
今日份的分享就到这里啦!🌹🌹🌹欢迎关注博主学习不迷路🌹🌹🌹!