PYTHON从入门到实践10-文件操作与异常
# 【1】文件路径 绝对路径、相对路径(相对路径./可以省略)
# 【2】读取文件
import jsontry:with open("1.txt", 'r', encoding='utf-8') as f:print(f.read().strip())
except Exception as e:print("文件不存在", e)# 【3】写入文件
try:with open("1.txt", 'w', encoding='utf-8') as f:f.write("\n床前明月光,疑是地上霜。\n举头望明月,低头思故乡。\n")
except Exception as e:print(f"保存备份文件失败: {str(e)}")try:with open("1.txt", 'r', encoding='utf-8') as f:print(f.read().strip())
except Exception as e:print("文件不存在", e)
# json的方式读取和存储
try:with open("2.txt", 'r', encoding='utf-8') as f:read_res = str(json.loads(f.read().strip()))print("读取的结果为:" + read_res)
except Exception as e:print("文件不存在", e)try:with open("2.txt", 'w', encoding='utf-8') as f:temp_json = [{"name": "张三"},{"name": "李四"},]f.write(json.dumps(temp_json, ensure_ascii=False))
except Exception as e:print(f"保存备份文件失败: {str(e)}")
# 【3】异常 try except
try:i = 2 / 0
except Exception as e:print(f"计算发生错误:{str(e)}")
一、文件路径:绝对路径与相对路径
在Python文件操作中,理解文件路径是第一步。文件路径主要分为两种类型:
-
绝对路径:从根目录开始的完整路径,如
C:\Users\Name\file.txt
(Windows)或/home/name/file.txt
(Linux/Mac) -
相对路径:相对于当前工作目录的路径
-
./file.txt
- 当前目录下的文件(./
可以省略) -
../file.txt
- 上级目录下的文件 -
subdir/file.txt
- 当前目录子文件夹中的文件
-
python
复制
下载
# 使用相对路径打开文件(省略./) with open("1.txt", 'r', encoding='utf-8') as f:content = f.read()
二、文件读取与写入操作
1. 基本文件操作
Python使用open()
函数进行文件操作,基本模式包括:
-
'r'
:读取(默认) -
'w'
:写入(会覆盖现有内容) -
'a'
:追加 -
'x'
:独占创建 -
'b'
:二进制模式 -
'+'
:读写模式
安全读取文件的推荐做法:
python
复制
下载
try:with open("1.txt", 'r', encoding='utf-8') as f:print(f.read().strip()) # strip()移除首尾空白字符 except Exception as e:print("文件不存在", e)
写入文件示例:
python
复制
下载
try:with open("1.txt", 'w', encoding='utf-8') as f:f.write("\n床前明月光,疑是地上霜。\n举头望明月,低头思故乡。\n") except Exception as e:print(f"保存文件失败: {str(e)}")
2. 使用上下文管理器(with语句)
with
语句会自动处理文件的打开和关闭,即使在操作过程中发生异常也能确保文件被正确关闭,这是最推荐的文件操作方式。
三、JSON文件处理
Python内置的json
模块可以方便地处理JSON数据。
JSON读取:
python
复制
下载
import jsontry:with open("2.txt", 'r', encoding='utf-8') as f:data = json.loads(f.read().strip())print("读取的结果为:" + str(data)) except Exception as e:print("文件不存在", e)
JSON写入:
python
复制
下载
try:with open("2.txt", 'w', encoding='utf-8') as f:temp_json = [{"name": "张三"},{"name": "李四"},]json.dump(temp_json, f, ensure_ascii=False) # 直接写入文件# 或者使用json.dumps() + f.write() except Exception as e:print(f"保存JSON文件失败: {str(e)}")
关键参数说明:
-
ensure_ascii=False
:确保中文字符正常显示而不是Unicode转义 -
indent=4
:美化输出,增加缩进(可选)
四、异常处理机制
Python使用try-except
块处理异常,这是编写健壮代码的关键。
基本异常处理:
python
复制
下载
try:i = 2 / 0 # 这会引发ZeroDivisionError except Exception as e:print(f"计算发生错误:{str(e)}")
更完整的异常处理结构:
python
复制
下载
try:# 尝试执行的代码with open("data.txt", 'r') as f:data = f.read() except FileNotFoundError:print("文件未找到,请检查路径") except PermissionError:print("没有文件访问权限") except Exception as e:print(f"发生未知错误: {str(e)}") else:print("文件读取成功!") finally:print("操作完成,无论成功与否都会执行")
五、最佳实践与常见问题
-
编码问题:总是明确指定文件编码(推荐UTF-8)
-
资源管理:始终使用
with
语句自动管理文件资源 -
异常处理:针对不同异常类型分别处理,不要笼统捕获所有异常
-
文件存在检查:操作前可用
os.path.exists()
检查,但注意竞态条件 -
大文件处理:对于大文件,使用逐行读取或分块读取
python
复制
下载
# 大文件处理示例 with open('large_file.txt', 'r', encoding='utf-8') as f:for line in f: # 逐行读取,内存友好process_line(line)
结语
掌握Python文件操作和异常处理是每个Python开发者的基本功。通过本文介绍的技术,你可以安全、高效地进行各种文件操作,并优雅地处理可能出现的异常情况。记住,良好的异常处理习惯不仅能防止程序崩溃,还能提供更友好的用户体验和更有效的调试信息。