人工智能之编程基础 Python 入门:第十章 文件读写

人工智能之编程基础 Python 入门

第十章 文件读写


@

目录
  • 人工智能之编程基础 Python 入门
  • 前言
  • 1. 基本文件操作
    • 1.1 打开文件:open()
    • 1.2 推荐方式:使用 with 语句(上下文管理器)
  • 2. 读取文件
    • 2.1 读取整个文件
    • 2.2 逐行读取
    • 2.3 读取指定字符数
  • 3. 写入文件
    • 3.1 写入字符串
    • 3.2 写入多行
  • 4. 文件指针操作
    • 4.1 获取和设置文件位置
    • 4.2 常用 seek 参数
  • 5. 二进制文件操作
    • 5.1 读写二进制文件
    • 5.2 处理字节数据
  • 6. 常见文件操作场景
    • 6.1 配置文件读写
    • 6.2 CSV 文件处理(推荐使用 csv 模块)
    • 6.3 JSON 文件处理
  • 7. 文件和目录操作(os 和 pathlib)
    • 7.1 使用 os 模块
    • 7.2 使用 pathlib(Python 3.4+ 推荐)
  • 8. 异常处理
    • 8.1 处理文件操作异常
    • 8.2 安全的文件操作函数
  • 9. 性能优化技巧
    • 9.1 大文件处理
    • 9.2 缓冲区设置
  • 10. 最佳实践总结
    • ✅ 推荐做法
    • ❌ 避免的做法
    • ✅ 正确做法
  • 11. 实用工具函数
  • 总结
  • 感想
  • 资料关注


前言

本章节主要学习python的文件读写操作,文件读写(File I/O) 是程序与外部存储交互的基础操作。Python 提供了简洁而强大的内置函数和上下文管理器来处理各种文件操作。


1. 基本文件操作

1.1 打开文件:open()

# 基本语法
file = open(filename, mode, encoding=None)# 常用模式
# 'r'  - 只读(默认)
# 'w'  - 写入(覆盖原内容)
# 'a'  - 追加(在文件末尾添加)
# 'x'  - 独占创建(文件已存在则失败)
# 'b'  - 二进制模式(如 'rb', 'wb')
# 't'  - 文本模式(默认,如 'rt', 'wt')
# '+'  - 读写模式(如 'r+', 'w+')

1.2 推荐方式:使用 with 语句(上下文管理器)

# 自动关闭文件,即使发生异常
with open('example.txt', 'r', encoding='utf-8') as f:content = f.read()print(content)
# 文件在此处自动关闭

✅ ​强烈推荐使用 with 语句​,避免忘记关闭文件导致资源泄露。


2. 读取文件

2.1 读取整个文件

# 读取全部内容为字符串
with open('file.txt', 'r', encoding='utf-8') as f:content = f.read()print(content)

2.2 逐行读取

# 方法1:readline() - 每次读取一行
with open('file.txt', 'r', encoding='utf-8') as f:line = f.readline()while line:print(line.strip())  # strip() 去除换行符line = f.readline()# 方法2:readlines() - 读取所有行到列表
with open('file.txt', 'r', encoding='utf-8') as f:lines = f.readlines()for line in lines:print(line.strip())# 方法3:直接遍历文件对象(最高效)
with open('file.txt', 'r', encoding='utf-8') as f:for line in f:print(line.strip())

2.3 读取指定字符数

with open('file.txt', 'r', encoding='utf-8') as f:chunk = f.read(100)  # 读取前100个字符print(chunk)

3. 写入文件

3.1 写入字符串

# 覆盖写入
with open('output.txt', 'w', encoding='utf-8') as f:f.write('Hello, World!\n')f.write('这是第二行\n')# 追加写入
with open('output.txt', 'a', encoding='utf-8') as f:f.write('这是追加的内容\n')

3.2 写入多行

lines = ['第一行\n', '第二行\n', '第三行\n']# 方法1:循环写入
with open('output.txt', 'w', encoding='utf-8') as f:for line in lines:f.write(line)# 方法2:writelines()
with open('output.txt', 'w', encoding='utf-8') as f:f.writelines(lines)

⚠️ 注意:writelines() 不会自动添加换行符,需要手动添加。


4. 文件指针操作

4.1 获取和设置文件位置

with open('file.txt', 'r', encoding='utf-8') as f:print(f.tell())  # 当前位置(字节)content = f.read(10)print(f.tell())  # 读取10字节后的位置f.seek(0)        # 回到文件开头print(f.read(5)) # 重新读取前5个字符

4.2 常用 seek 参数

f.seek(0)      # 文件开头
f.seek(0, 2)   # 文件末尾 (0偏移,从末尾开始)
f.seek(-10, 2) # 倒数第10个字节

5. 二进制文件操作

5.1 读写二进制文件

# 读取二进制文件(如图片、音频)
with open('image.jpg', 'rb') as f:data = f.read()print(f"文件大小: {len(data)} 字节")# 写入二进制数据
with open('copy.jpg', 'wb') as f:f.write(data)

5.2 处理字节数据

# 写入字节
with open('binary.dat', 'wb') as f:f.write(b'Hello World')f.write(bytes([0, 1, 2, 3, 4]))# 读取字节
with open('binary.dat', 'rb') as f:data = f.read()print(data)        # b'Hello World\x00\x01\x02\x03\x04'print(data[0])     # 72 (H的ASCII码)

6. 常见文件操作场景

6.1 配置文件读写

# 读取配置文件
def read_config(filename):config = {}with open(filename, 'r', encoding='utf-8') as f:for line in f:line = line.strip()if line and not line.startswith('#'):key, value = line.split('=', 1)config[key.strip()] = value.strip()return config# 写入配置文件
def write_config(filename, config):with open(filename, 'w', encoding='utf-8') as f:for key, value in config.items():f.write(f"{key} = {value}\n")

6.2 CSV 文件处理(推荐使用 csv 模块)

import csv# 写入 CSV
with open('data.csv', 'w', newline='', encoding='utf-8') as f:writer = csv.writer(f)writer.writerow(['姓名', '年龄', '城市'])writer.writerow(['张三', 25, '北京'])writer.writerow(['李四', 30, '上海'])# 读取 CSV
with open('data.csv', 'r', encoding='utf-8') as f:reader = csv.reader(f)for row in reader:print(row)

6.3 JSON 文件处理

import json# 写入 JSON
data = {'name': 'Alice', 'age': 25, 'hobbies': ['reading', 'swimming']}
with open('data.json', 'w', encoding='utf-8') as f:json.dump(data, f, ensure_ascii=False, indent=2)# 读取 JSON
with open('data.json', 'r', encoding='utf-8') as f:loaded_data = json.load(f)print(loaded_data)

7. 文件和目录操作(os 和 pathlib)

7.1 使用 os 模块

import os# 检查文件是否存在
if os.path.exists('file.txt'):print("文件存在")# 获取文件大小
size = os.path.getsize('file.txt')# 列出目录内容
files = os.listdir('.')# 创建目录
os.makedirs('new_dir', exist_ok=True)# 删除文件
os.remove('old_file.txt')

7.2 使用 pathlib(Python 3.4+ 推荐)

from pathlib import Path# 创建 Path 对象
file_path = Path('data') / 'input.txt'# 检查文件是否存在
if file_path.exists():print("文件存在")# 读取文件
content = file_path.read_text(encoding='utf-8')# 写入文件
file_path.write_text('Hello World', encoding='utf-8')# 创建目录
file_path.parent.mkdir(parents=True, exist_ok=True)# 遍历目录
for file in Path('.').glob('*.py'):print(file)

8. 异常处理

8.1 处理文件操作异常

try:with open('nonexistent.txt', 'r', encoding='utf-8') as f:content = f.read()
except FileNotFoundError:print("文件未找到")
except PermissionError:print("没有权限访问文件")
except UnicodeDecodeError:print("文件编码错误")
except Exception as e:print(f"其他错误: {e}")

8.2 安全的文件操作函数

def safe_read_file(filename, encoding='utf-8'):"""安全读取文件"""try:with open(filename, 'r', encoding=encoding) as f:return f.read()except FileNotFoundError:print(f"文件 {filename} 不存在")return Noneexcept Exception as e:print(f"读取文件 {filename} 时出错: {e}")return None

9. 性能优化技巧

9.1 大文件处理

# 逐块读取大文件(避免内存溢出)
def process_large_file(filename, chunk_size=8192):with open(filename, 'r', encoding='utf-8') as f:while True:chunk = f.read(chunk_size)if not chunk:break# 处理数据块process_chunk(chunk)def process_chunk(chunk):# 处理逻辑print(f"处理了 {len(chunk)} 个字符")

9.2 缓冲区设置

# 自定义缓冲区大小
with open('large_file.txt', 'r', buffering=8192) as f:# 默认缓冲区通常是 8192 字节content = f.read()

10. 最佳实践总结

✅ 推荐做法

  1. 始终使用 with 语句处理文件
  2. 明确指定编码​(通常是 utf-8
  3. 使用 pathlib 而不是字符串拼接路径
  4. 处理异常​,特别是 FileNotFoundError
  5. 大文件逐行或分块处理​,避免内存问题
  6. 使用专门的模块处理特定格式(如 csvjsonxml

❌ 避免的做法

# 错误1:忘记关闭文件
f = open('file.txt', 'r')
content = f.read()
# f.close() 被忘记了!# 错误2:不指定编码
with open('file.txt', 'r') as f:  # 可能在某些系统上出错content = f.read()# 错误3:字符串拼接路径
filename = 'data/' + 'file.txt'  # 跨平台问题

✅ 正确做法

from pathlib import Path# 使用 pathlib 处理路径
data_dir = Path('data')
filename = data_dir / 'file.txt'# 安全的文件操作
try:with open(filename, 'r', encoding='utf-8') as f:content = f.read()
except FileNotFoundError:print(f"文件不存在: {filename}")

11. 实用工具函数

from pathlib import Path
import jsondef read_lines(filename):"""读取文件所有行,返回列表(去除换行符)"""try:return Path(filename).read_text(encoding='utf-8').splitlines()except Exception as e:print(f"读取文件失败: {e}")return []def write_lines(filename, lines):"""写入行列表到文件"""try:Path(filename).write_text('\n'.join(lines) + '\n', encoding='utf-8')return Trueexcept Exception as e:print(f"写入文件失败: {e}")return Falsedef backup_file(filename):"""创建文件备份"""src = Path(filename)if src.exists():backup = src.with_suffix(src.suffix + '.bak')backup.write_bytes(src.read_bytes())return backupreturn None

总结

本文主要介绍python的文件读写操作,也是python入门的结束,关于数据结构、爬虫、以及面向对象等更高一层的需要继续学习,同时也需要掌握相关的算法库。

感想

当下经济形式的严峻,并不能阻止我们努力向前,人工智能不论是否当前泡沫化,与当初的互联网类似,是未来发展的趋势,也是不可阻挡的。我们只有拥抱它,一方面提升知识储备即根基,避免过度依赖ai失去了人本身的创造能力,一方面借助ai来达到更进一步的满足市场的需求。

资料关注

相关资料获取:
公众号:咚咚王

艺术二维码.png

《Python编程:从入门到实践》
《利用Python进行数据分析》
《算法导论中文第三版》
《概率论与数理统计(第四版) (盛骤) 》
《程序员的数学》
《线性代数应该这样学第3版》
《微积分和数学分析引论》
《(西瓜书)周志华-机器学习》
《TensorFlow机器学习实战指南》
《Sklearn与TensorFlow机器学习实用指南》
《模式识别(第四版)》
《深度学习 deep learning》伊恩·古德费洛著 花书
《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》
《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen) 》
《自然语言处理综论 第2版》
《Natural-Language-Processing-with-PyTorch》
《计算机视觉-算法与应用(中文版)》
《Learning OpenCV 4》
《AIGC:智能创作时代》杜雨+&+张孜铭
《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》
《从零构建大语言模型(中文版)》
《实战AI大模型》
《AI 3.0》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/968262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

连续段 DP

连续段 DP 主要是做对于序列的计数类问题,其中对序列的限制一般是相邻数要满足一些条件。同时这个序列一般是一个排列。 连续段 DP 的主要思路是依照限制以此往序列里面填数。但是这个填数的过程是动态的,也就是我们…

深入探讨React源码与实现原理

我将从几个核心层面来展开,这也可以作为你自我审视和深入研究的路线图。 一、核心架构:Fiber 架构 这是现代React的基石。理解Fiber是理解一切新特性(如Concurrent Mode、Suspense)的前提。 你需要能清晰地阐述:F…

人工智能之编程基础 Python 入门:第九章 模块与包

人工智能之编程基础 Python 入门:第九章 模块与包人工智能之编程基础 Python 入门 第九章 模块与包@目录人工智能之编程基础 Python 入门前言模块1. 模块的基本概念什么是模块?2. 导入模块1. import 语句2. from ...…

基于Playwright + Allure + Pytest 企业级UI录制与回放自动化测试项目

基于Playwright + Allure + Pytest 企业级UI录制与回放自动化测试项目录制脚本: UI回放开始: 生成测试报告:

IM SDK选型避坑指南,2025年最新10家服务商稳定性排名

IM SDK选型避坑指南,2025年最新10家服务商稳定性排名随着移动互联网的深入发展,即时通讯已渗透到各行各业,从日常的社交聊天到关键业务的金融交易、远程医疗、在线教育,稳定可靠的IM服务成为保障用户体验和业务连续…

自定义yml激活进本地通用yml

自定义yml激活进本地通用yml 核心结论:自定义 YML 可通过「继承引用」「合并配置」或「指定加载顺序」三种方式,激活并复用本地通用 YML 的配置。 关键实现方式Spring Boot 场景(最常用):通用 YML 作为 base 配置…

AT_jsc2019_qual_e Card Collector

首先考虑什么情况不合法。假设 \(S\) 为选出卡片的集合,玩一下发现不合法当且仅当存在 \(T\subseteq S\),\(X=\{x|(x,y)\in T\}\),\(Y=\{y|(x,y)\in T\}\) 满足 \(|X|+|Y|<|T|\)。 假设当前需要加入一个点 \((x_…

人工智能之编程基础 Python 入门:第八章 函数与装饰器

人工智能之编程基础 Python 入门:第八章 函数与装饰器人工智能之编程基础 Python 入门 第八章 函数与装饰器@目录人工智能之编程基础 Python 入门前言函数1. 函数的定义与调用基本语法简单示例2. 函数的组成部分3. 参…

邻项交换

又称微扰法等 例题 最小化最大延迟惩罚 有 n 个任务,每个任务有一个有用时 \(p_i\) 和一个截止时间 \(d_i\),若完成时间为 \(c_i\),要最小化 \(max{c_i - d_i}\)。 考虑如果有两个相邻的 \(i\) 和 \(j\),不交换答案…

day26-MCP基础

MCP快速入门实战 一、MCP技术体系介绍 MCP,全称是Model Context Protocol,模型上下文协议,由Claude母公司Anthropic于2024年11月正式提出。MCP解决的最大痛点,就是Agent开发中调用外部工具的技术门槛过高的问题。 …

20232427 2025-2026-1 《网络与系统攻防技术》实验六实验报告

一、实验内容 本次实验聚焦 Metasploit 攻击渗透实践,核心内容包括两部分:一是前期渗透准备,通过主机发现、端口扫描及漏洞扫描获取靶机基础信息;二是漏洞渗透利用,针对 Metasploitable2 靶机的 4 类典型漏洞(Vs…

P9534 [YsOI2023] 广度优先遍历

考虑一个事情,把树建出来后,非树边都可以扔到后面去,这显然不影响答案。 思考为什么树边的顺序会影响答案,实质是因为一个结点 \(x\) 连了许多非树边,若是这些非树边先被访问了,那么 \(x\) 的父亲就要换了,因此…

2025-11-17 ZYZ28-NOIP模拟赛-Round7 hetao1733837的record

2025-11-17 ZYZ28-NOIP模拟赛-Round7 hetao1733837的record2025-11-17 ZYZ28-NOIP模拟赛-Round7 hetao1733837的record 好累😩 比赛链接:ZYZ28-NOIP模拟赛-Round7 - ZYZOJ A.pmst $( ‵▽′)ψ$$lz$竟然把原来的$T2…

day25-langgraph进阶

整体课程设计介绍 第一次直播:开班介绍+环境适配+自主学习任务布置 任务:预习系列(参考2期)day20-大模型基本概述+API调用 day21-大模型基本概述+API调用 day22-langchain框架基础 day23-langchain框架进阶第二次直…

markdown格式绘制各种图

推荐使用 Mermaid 进行绘制

11.17 考试总结

11.17 考试总结 赛时复盘 7:50-8:10 通读了题面,有了点第一印象,T1感觉像是贪心,T2没什么头绪,T3是计数题看数据范围感觉像是个简单DP,T4感觉很困难,决定了开题顺序:1-3-2-4。 8:10-9:10 根据特殊性质先想树上发…