当前位置: 首页 > news >正文

Python中的文件操作详解

在Python编程中,文件操作是一项非常基础且重要的技能。无论是读取配置文件、处理日志数据,还是保存用户信息,都离不开对文件的读写操作。Python提供了简洁而强大的内置函数和方法来处理各种文件类型。本文将详细介绍Python中常见的文件操作方式。


一、基本概念:什么是文件操作?

文件操作指的是程序与计算机文件系统之间的交互,主要包括:

  • 打开文件
  • 读取文件内容
  • 写入或修改文件内容
  • 关闭文件

Python通过内置的open()函数来实现这些操作。


二、打开文件:open()函数

open()是进行文件操作的第一步,其基本语法如下:

file_object = open(file_path, mode, encoding=None)

参数说明:

参数含义
file_path文件路径(可以是相对路径或绝对路径)
mode打开模式(如只读、写入等)
encoding编码格式(常用utf-8

常见打开模式:

模式描述
'r'只读模式(默认),文件必须存在
'w'写入模式,若文件存在则清空内容,不存在则创建
'a'追加模式,写入内容添加到文件末尾
'x'创建新文件并写入,若文件已存在则失败
'b'以二进制模式打开(如'rb','wb'
't'文本模式(默认)
'+'可读可写(如'r+','w+'

示例:以 UTF-8 编码打开一个文本文件用于读取

f = open('example.txt', 'r', encoding='utf-8')


三、读取文件内容

打开文件后,可以使用多种方法读取内容。

1.read()—— 读取全部内容

with open('example.txt', 'r', encoding='utf-8') as f:

content = f.read()

print(content)

2.readline()—— 逐行读取(每次读一行)

with open('example.txt', 'r', encoding='utf-8') as f:

line = f.readline()

while line:

print(line.strip()) # strip() 去除换行符

line = f.readline()

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

with open('example.txt', 'r', encoding='utf-8') as f:

lines = f.readlines()

for line in lines:

print(line.strip())

4. 推荐方式:直接迭代文件对象(高效且节省内存)

with open('example.txt', 'r', encoding='utf-8') as f:

for line in f:

print(line.strip())


四、写入文件内容

1. 使用write()写入字符串

with open('output.txt', 'w', encoding='utf-8') as f:

f.write("Hello, Python!\n")

f.write("这是第二行。\n")

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

lines = ["第一行\n", "第二行\n", "第三行\n"]

with open('output.txt', 'w', encoding='utf-8') as f:

f.writelines(lines)

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


五、使用with语句管理文件(推荐做法)

使用with语句可以确保文件在使用后自动关闭,即使发生异常也不会导致资源泄露。

with open('data.txt', 'r', encoding='utf-8') as f:

content = f.read()

print(content)

# 文件在此处已自动关闭

对比传统方式(不推荐):

f = open('data.txt', 'r', encoding='utf-8')

content = f.read()

print(content)

f.close() # 忘记 close 可能造成问题


六、处理不同类型的文件

1. CSV 文件(可使用csv模块)

import csv

# 读取 CSV

with open('students.csv', 'r', encoding='utf-8') as f:

reader = csv.reader(f)

for row in reader:

print(row)

# 写入 CSV

with open('students.csv', 'w', encoding='utf-8', newline='') as f:

writer = csv.writer(f)

writer.writerow(['Name', 'Age', 'City'])

writer.writerow(['Alice', 23, 'Beijing'])

注意:写入 CSV 时添加newline=''防止空行。

2. JSON 文件(使用json模块)

import json

# 写入 JSON

data = {'name': 'Bob', 'age': 25, 'city': 'Shanghai'}

with open('data.json', 'w', encoding='utf-8') as f:

json.dump(data, f, ensure_ascii=False, indent=4)

# 读取 JSON

with open('data.json', 'r', encoding='utf-8') as f:

loaded_data = json.load(f)

print(loaded_data)

3. 二进制文件(如图片、音频)

# 复制图片文件

with open('photo.jpg', 'rb') as src:

with open('copy_photo.jpg', 'wb') as dst:

dst.write(src.read())


七、常见异常处理

在文件操作中,可能会遇到文件不存在、权限不足等问题,建议使用try-except处理:

try:

with open('nonexistent.txt', 'r', encoding='utf-8') as f:

content = f.read()

except FileNotFoundError:

print("文件未找到!")

except PermissionError:

print("没有权限访问该文件。")

except Exception as e:

print(f"发生错误:{e}")


八、实用技巧与注意事项

  1. 始终指定编码:尤其是在处理中文时,强烈建议使用encoding='utf-8'
  2. 优先使用with语句:避免忘记关闭文件。
  3. 路径处理建议使用os.pathpathlib

from pathlib import Path

file_path = Path("folder") / "example.txt"

if file_path.exists():

with open(file_path, 'r', encoding='utf-8') as f:

print(f.read())

  1. 大文件处理注意内存:不要一次性read()超大文件,应逐行处理。

九、总结

Python 的文件操作简单直观,功能强大。掌握以下几点即可应对大多数场景:

  • 使用open()打开文件
  • 正确选择modeencoding
  • with确保安全关闭
  • 熟练运用read(),readline(),write()等方法
  • 结合csvjson模块处理结构化数据
  • 添加异常处理提升程序健壮性

通过合理使用这些技术,你可以轻松地在 Python 中完成日志记录、数据导入导出、配置管理等各种任务。


🎯小练习
编写一个程序,读取一个文本文件,统计其中每一行的字符数,并将结果写入另一个文件中。

with open('input.txt', 'r', encoding='utf-8') as fin, \
open('output.txt', 'w', encoding='utf-8') as fout:
for i, line in enumerate(fin, 1):
char_count = len(line.strip())
fout.write(f"第{i}行: {char_count}个字符\n")

http://www.zskr.cn/news/143362.html

相关文章:

  • 毕设成品 stm32的火灾监控与可视化系统(源码+硬件+论文)
  • 基于SpringBoot的冷链运输生鲜销售系统计算机毕业设计项目源码文档
  • 12/23
  • 什么是智能问数
  • LLM之Agent完全指南:从零构建AI Agents的7大核心类型与实战代码!
  • 一张Transformer-LSTM模型的结构图
  • 稀疏注意力机制
  • 【技术美术】渲染空间变换概述
  • 疆鸿智能PROFIBUS联RS232:破解汽车智造追溯瓶颈,效率怒增!
  • Java毕设选题推荐:基于springboot+vue的社区资源共享系统设计与实现社区公共资源(活动室、工具房),实现在线预约与使用登记【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 【软件开发】设计模式个人解读
  • 前端工程化核心面试题与详解
  • 【技术美术】光照技术概述
  • HarmonyOS 5开发从入门到精通(十四):待办事项应用实战(下)
  • 【软件开发】CMake学习笔记
  • 【技术美术】卡通风格渲染
  • 【软件开发】Doxygen使用笔记
  • 【技术美术】程序化噪波实现
  • 【Godot】【入门】编辑器界面速通:场景/节点/Inspector/信号(30 分钟上手不迷路)
  • leetcode 500 键盘行 WP
  • Windows系统文件msjter40.dll缺少损坏 下载修复
  • Kafka入门必知概念——Topic、分区、Offset、消费组的协作机制与影响
  • 软件缺少msjint40.dll文件 下载修复方法
  • STM32单片机温控风扇温度采集PWM调速设计
  • 延边州腺样体肥大、失眠、儿童抽动症中医调理指南 - 品牌日记
  • 流量洪峰冲不垮的秘密:揭秘系统过载保护的核心防线
  • GraphRAG革命:本体驱动的零噪声知识抽取框架,开发者的收藏必备!
  • C++学习笔记 35 虚析构函数
  • 深度解析Salesforce、Google、微软三大巨头的AI Agent战略布局与实战应用!
  • 挑战自我:如何在3个月内快速掌握工业级开发能力?AI架构师为0基础小白量身打造的超详细学习路线图!