云计算百科
云计算领域专业知识百科平台

Python文件操作与异常处理

Python文件操作与异常处理

这篇整理文件读写和异常处理两个知识点。文件操作在实际项目中几乎天天用,异常处理则是让程序更健壮的关键。


十九、文件操作

一、文件操作的基本流程

文件操作就三步:打开 -> 读写 -> 关闭

# 1. 打开文件
f = open("文件名", "访问模式", encoding="编码")

# 2. 读取或者写入内容
content = f.read()

# 3. 关闭文件
f.close()

更好的写法是用 with 语句,自动关闭文件:

with open("文件名", "r", encoding="utf-8") as f:
content = f.read()
print(content)
# 出了with块,文件自动关闭

二、打开文件 open()

文件对象 = open("文件名", "访问模式", encoding="编码")

文件路径

  • 绝对路径:从根目录开始,完整唯一的路径,在哪运行代码都不会出错
  • 相对路径:以当前代码所在目录为起点,只写相对路径
    • . 当前目录
    • .. 上一级目录
    • ../.. 上两级目录

访问模式

模式含义文件不存在时文件存在时读写位置
“r” 只读(默认) 报错 从开头读 文件开头
“w” 只写 创建新文件 清空原内容 文件开头
“a” 追加写 创建新文件 保留原内容 文件末尾
“r+” 读写 报错 从开头读写 文件开头
“w+” 读写 创建新文件 清空原内容 文件开头
“a+” 读写追加 创建新文件 保留原内容 文件末尾

以上模式默认以文本方式处理文件。
后面加 b 表示二进制模式,如 "rb"、"wb",适用于图片、视频、音频等。二进制模式不需要 encoding 参数。

三、读取文件内容

1. read() —— 读取整个文件

with open("test.txt", "r", encoding="utf-8") as f:
content = f.read()
print(content)

2. read(n) —— 读取n个字符

with open("test.txt", "r", encoding="utf-8") as f:
content = f.read(10) # 读取前10个字符
print(content)

3. readline() —— 读取一行

with open("test.txt", "r", encoding="utf-8") as f:
line = f.readline() # 读取第一行
print(line)

4. readlines() —— 读取所有行,返回列表

with open("test.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
print(lines) # ["第一行\\n", "第二行\\n", …]

5. 直接遍历文件对象(推荐)

with open("test.txt", "r", encoding="utf-8") as f:
for line in f:
print(line, end="")

四、写入文件内容

1. write() —— 写入字符串

with open("test.txt", "w", encoding="utf-8") as f:
f.write("hello world!\\n")
f.write("这是第二行\\n")

2. writelines() —— 写入字符串列表

注意:writelines() 不会自动添加换行符,需要手动在每个字符串末尾加 \\n。

lines = ["第一行\\n", "第二行\\n", "第三行\\n"]
with open("test.txt", "w", encoding="utf-8") as f:
f.writelines(lines)

3. 追加写入

with open("test.txt", "a", encoding="utf-8") as f:
f.write("追加的内容\\n")


二十、异常

一、什么是异常?

异常(Exception)是程序在运行过程中发生的错误,它会中断程序的正常执行流程。

比如除零错误、文件不存在、索引越界等等。

二、为什么要处理异常?

  • 不处理异常:程序直接崩溃,用户体验差
  • 处理异常:让程序能够"容错",在出现错误时走备选方案或给出友好提示,不会意外崩溃

三、基本的异常处理语法

1. try-except:捕获常规异常

try:
# 可能出错的代码
result = 10 / 0
except:
# 如果出错,执行这里的代码
print("出现了异常!")

2. 捕获指定类型的异常

try:
number = int(input("请输入数字:"))
result = 100 / number
print(f"结果是:{result}")
except ZeroDivisionError:
print("不能输入0!")
except ValueError:
print("必须输入数字!")

3. 捕获异常对象

try:
my_list = [1, 2, 3]
print(my_list[10])
except IndexError as e:
print(f"越界错误:{e}")

4. 一个except捕获多种异常

try:
# 可能出错的代码
pass
except (ValueError, TypeError, ZeroDivisionError) as e:
print(f"出错了:{e}")

5. 捕获所有异常

try:
print(num)
except Exception as e:
print(f"发生错误:{e}")

6. else —— 没有异常时执行

try:
result = 10 / 2
except Exception as e:
print(e)
else:
print("没有异常,结果是:", result)

7. finally —— 无论是否异常都执行

try:
f = open("test.txt", "r")
except Exception as e:
f = open("test.txt", "w")
else:
print("没有异常,真开心")
finally:
f.close() # 不管有没有异常,文件都会被关闭

实际场景:读取配置文件,如果文件不存在就创建默认配置

import json

def load_config():
try:
with open("config.json", "r", encoding="utf-8") as f:
return json.load(f)
except FileNotFoundError:
print("配置文件不存在,创建默认配置")
return {"theme": "light", "lang": "zh"}
except json.JSONDecodeError:
print("配置文件格式错误")
return {"theme": "light", "lang": "zh"}

config = load_config()
print(config)

文件操作和异常处理就先到这,下一篇讲模块、JSON和面向对象。

赞(0)
未经允许不得转载:网硕互联帮助中心 » Python文件操作与异常处理
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!