Python文件操作指南
itomcoil 2025-04-24 01:15 26 浏览
一、核心函数 open() 精解
基本语法
open(file, mode='r', encoding=None, errors=None, newline=None)
关键参数解析
1. file(必需)
o 路径格式:
open('data.txt') # 当前目录文件
open('docs/report.csv') # 子目录文件
open(r'C:\Users\data.bin') # Windows原始路径
2. mode(模式控制)
模式 | 描述 | 典型场景 |
r | 读取文本(默认) | 配置文件读取 |
w | 覆盖写入文本 | 生成新报告 |
a | 追加写入文本 | 日志记录 |
rb | 读取二进制 | 图片/视频处理 |
wb | 覆盖写入二进制 | 生成压缩文件 |
r+ | 读写文本(保留内容) | 修改文件内容 |
模式扩展符:
o b:二进制模式(如图片处理)
o +:扩展读写功能(需搭配基础模式)
3. encoding(编码规范)
o 必须显式指定:
open('data.txt', encoding='utf-8') # 推荐统一使用UTF-8
o 特殊场景:
open('win_log.txt', encoding='gbk') # 处理Windows遗留文件
4. errors(错误处理)
策略 | 行为 | 适用场景 |
strict | 遇到错误抛出异常(默认) | 严格数据校验 |
ignore | 忽略错误字符 | 处理损坏文件 |
replace | 用替代错误字符 | 显示友好错误提示 |
5. newline(换行控制)
# 统一保存为Linux换行格式
with open('data.txt', 'w', newline='\n') as f:
f.write('Line1\nLine2')
二、文本文件操作三步曲
第一步:读取文件
# 安全读取模板
try:
with open('poem.txt', 'r', encoding='utf-8') as f:
print(f.read()) # 一次性读取全部内容
except FileNotFoundError:
print("文件不存在!")
# 逐行读取大文件
with open('big_file.log', 'r') as f:
for line in f: # 内存友好的读取方式
process_line(line)
第二步:写入文件
# 覆盖写入
with open('diary.txt', 'w', encoding='utf-8') as f:
f.write("2023-08-20 晴\n")
f.writelines(["学习Python文件操作\n", "完成实践练习\n"])
# 追加写入
with open('diary.txt', 'a') as f:
f.write("\n新增记录:掌握文件操作关键方法")
第三步:修改文件
# 修改指定行内容
lines = []
with open('config.ini', 'r+', encoding='utf-8') as f:
lines = f.readlines()
lines[2] = 'timeout=60\n' # 修改第三行配置
f.seek(0) # 重置文件指针
f.writelines(lines)
f.truncate() # 截断多余内容
三、常见文件格式处理
1. CSV文件处理
import csv
# 写入带标题的CSV
with open('employees.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=['ID', 'Name'])
writer.writeheader()
writer.writerow({'ID': 101, 'Name': '张三'})
writer.writerow({'ID': 102, 'Name': '李四'})
# 读取CSV并计算
with open('employees.csv', 'r') as f:
reader = csv.DictReader(f)
total = sum(int(row['ID']) for row in reader)
print(f"ID总和:{total}")
2. JSON文件处理
import json
# 写入嵌套结构数据
data = {
"system": {
"version": 2.3,
"users": ["张三", "李四"]
}
}
with open('config.json', 'w', encoding='utf-8') as f:
json.dump(data, f, indent=2, ensure_ascii=False)
# 读取并修改JSON
with open('config.json', 'r+', encoding='utf-8') as f:
config = json.load(f)
config['system']['version'] = 3.0 # 更新版本号
f.seek(0)
json.dump(config, f, indent=2)
3. 图片文件处理
# 复制图片文件
with open('photo.jpg', 'rb') as src, open('backup.jpg', 'wb') as dst:
dst.write(src.read())
# 分块处理大文件(100MB分块)
CHUNK_SIZE = 1024 * 1024 * 100
with open('video.mp4', 'rb') as src, open('copy.mp4', 'wb') as dst:
while chunk := src.read(CHUNK_SIZE):
dst.write(chunk)
四、异常处理精要
综合处理模板
try:
with open('data.json', 'r', encoding='utf-8') as f:
data = json.load(f)
except FileNotFoundError:
print("错误:文件不存在")
except json.JSONDecodeError as e:
print(f"JSON解析失败:第{e.lineno}行")
except PermissionError:
print("错误:没有访问权限")
except Exception as e:
print(f"未知错误:{type(e).__name__}")
五、最佳实践要点
- 统一编码:始终明确指定encoding='utf-8'
- 路径安全:使用os.path.join()处理路径拼接
- 资源管理:优先使用with语句自动关闭文件
- 大文件处理:采用分块读写避免内存溢出
- 模式选择:理解不同模式对文件内容的影响
# 实践示例:配置文件更新
def update_config(key, value):
try:
with open('config.json', 'r+', encoding='utf-8') as f:
config = json.load(f)
config[key] = value
f.seek(0)
json.dump(config, f, indent=2)
f.truncate()
return True
except Exception as e:
print(f"更新失败:{str(e)}")
return False
相关推荐
- 第十章:优化设计与自动化工作流(优化设计是)
-
以下重点讲解优化设计、自动化脚本编写以及与其他工具(如Python、优化算法库)的集成,提升CFD仿真的工程应用效率。目标:掌握参数化扫描、优化算法集成和批量任务管理,实现从单次模拟到自动化设计探索的...
- 安装python语言,运行你的第一行代码
-
#01安装Python访问Python官方(https://www.python.org/),下载并安装最新版本的Python。确保安装过程中勾选“Addpython.exetoPAT...
- Python安装(python安装的库在哪个文件夹)
-
Windows系统1.安装python1.1下载Python安装包打开官方网站:https://www.python.org/downloads/点击"DownloadPython3.1...
- 比pip快100倍的Python包安装工具(python2.7.5安装pip)
-
简介uv是一款开源的Python包安装工具,GitHubstar高达56k,以性能极快著称,具有以下特性(官方英文原文):Asingletooltoreplacepip,pip-tool...
- 【跟着豆包AI学Python】Python环境的安装,编写第一个程序
-
最近几年,人工智能越来越走进人们的日常生活,国内各大公司都推出了自己的AI助手,例如:阿里旗下的通义千问、百度旗下的文心一言、腾讯的腾讯元宝、深度求索的deepseek等,元宝就是字节跳动公司推出的A...
- Python3+ 变量命名全攻略:PEP8 规范 + 官方禁忌...
-
Python3+变量命名规则与约定详解一、官方命名规则(必须遵守)1.合法字符集变量名只能包含:大小写字母(a-z,A-Z)数字(0-9)下划线(_)2.禁止数字开头合法:user_age,...
- Python程序打包为EXE的全面指南:从入门到精通
-
引言在Python开发中,将程序打包成可执行文件(EXE)是分发应用程序的重要环节。通过打包,我们可以创建独立的可执行文件,让没有安装Python环境的用户也能运行我们的程序。本篇文章将详细介绍如何使...
- 别再纸上谈兵了!手把手教你安装GraalVM,让你的代码瞬间起飞!
-
各位老铁们,是不是每次看到我吹嘘GraalVM的各种神迹,心里都痒痒的?想让自己的Java程序秒启动?想让Python脚本跑得比平时快好几倍?想体验一把多语言无缝协作的快感?但一想到要下载、配置、敲命...
- 纠结坏了!从 Python 3.8 升级到 3.14 真有必要吗?
-
点赞、收藏、加关注,下次找我不迷路"我电脑里装的Python3.8,现在都出3.14了,要不要赶紧升级啊?会不会像手机系统更新一样,越升级越卡?"相信很多刚入门的朋友都有类...
- win10下python3.13.3最新版本解释器的下载与安装
-
一、python3.13.3下载官方下载地址:https://www.python.org/1.浏览器访问https://www.python.org/这个地址,进入python的网站,点击【Dowl...
- Python简介与开发环境搭建详细教程
-
1.1Python简介与开发环境搭建详细教程一、Python语言简介1.Python的核心特点2.Python的应用领域表1.1Python主要应用领域领域典型应用常用库Web开发网站后端D...
- python开发小游戏案例(python游戏开发入门经典教程)
-
#头条创作挑战赛#假设你正在开发一个小型游戏,需要实现角色移动、障碍物生成、碰撞检测等功能。你可以使用Python和Pygame库来开发这个游戏。输入以下命令来安装Pygame:pipinstall...
- Python编程:从入门到实践 第十一、二 章 武装飞船
-
假设我们有一个名为AnonymousSurvey的类,用于收集匿名调查的答案。该类包含以下方法:classAnonymousSurvey:def__init__(self,questi...
- 「Python系列」python几个重要模块的安装(二)
-
一、python的pygame的安装:安装地址:https://www.cnblogs.com/charliedaifu/p/9938542.htmlpyagme包下载地址:https://down...
- python如何绘制消消乐小游戏(python字母消消乐)
-
要开发一款消消乐的小游戏界面,我们可以使用Python的pygame库。首先需要安装pygame库,然后创建一个窗口,加载游戏素材,处理游戏逻辑,以及绘制游戏界面。以下是一个简单的消消乐游戏界面实现:...
- 一周热门
- 最近发表
-
- 第十章:优化设计与自动化工作流(优化设计是)
- 安装python语言,运行你的第一行代码
- Python安装(python安装的库在哪个文件夹)
- 比pip快100倍的Python包安装工具(python2.7.5安装pip)
- 【跟着豆包AI学Python】Python环境的安装,编写第一个程序
- Python3+ 变量命名全攻略:PEP8 规范 + 官方禁忌...
- Python程序打包为EXE的全面指南:从入门到精通
- 别再纸上谈兵了!手把手教你安装GraalVM,让你的代码瞬间起飞!
- 纠结坏了!从 Python 3.8 升级到 3.14 真有必要吗?
- win10下python3.13.3最新版本解释器的下载与安装
- 标签列表
-
- ps图案在哪里 (33)
- super().__init__ (33)
- python 获取日期 (34)
- 0xa (36)
- super().__init__()详解 (33)
- python安装包在哪里找 (33)
- linux查看python版本信息 (35)
- python怎么改成中文 (35)
- php文件怎么在浏览器运行 (33)
- eval在python中的意思 (33)
- python安装opencv库 (35)
- python div (34)
- sticky css (33)
- python中random.randint()函数 (34)
- python去掉字符串中的指定字符 (33)
- python入门经典100题 (34)
- anaconda安装路径 (34)
- yield和return的区别 (33)
- 1到10的阶乘之和是多少 (35)
- python安装sklearn库 (33)
- dom和bom区别 (33)
- js 替换指定位置的字符 (33)
- python判断元素是否存在 (33)
- sorted key (33)
- shutil.copy() (33)