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

[Python编程] Python3 文件操作

目录

一、核心入口:Python3 的 open () 方法

1️⃣open () 的基础用法

2️⃣ open () 的完整语法

2. readline ():逐行读取

3. readlines ():读取所有行到列表

三、实战场景:文件操作的常见用法

1️⃣配置文件的读取与写入

示例:操作 config.txt 配置文件

2️⃣程序日志的记录

示例:记录 app.log 日志

四、扩展工具:Python3 的 OS 模块

1️⃣基础文件与目录操作

2️⃣高级操作:遍历目录树(os.walk ())

语法与示例

3️⃣路径处理神器:os.path 模块

4️⃣其他实用功能

五、总结与学习建议


对于 Python 初学者而言,文件操作是入门阶段必须掌握的核心技能之一。无论是读取配置文件、记录程序日志,还是处理数据文件,都离不开文件操作的相关知识。本文将基于 Python3 的特性,从open()方法、file 对象、实际应用场景到 OS 模块,系统梳理文件操作的全流程,帮你快速上手并灵活运用。

一、核心入口:Python3 的 open () 方法

文件操作的第一步是 “打开文件”,Python 通过内置的open()函数实现这一功能,它会返回一个文件对象,后续的读、写、关闭等操作都依赖这个对象。

1️⃣open () 的基础用法

open()最常用的形式只需两个参数:文件名(路径)和打开模式,语法如下:

python

运行

open(file, mode)
  • file:必需参数,文件的路径(相对路径或绝对路径,下文会详细说明)。
  • mode:可选参数,定义文件的操作类型,常见模式如下表:
模式含义注意事项
'r'读模式(默认)只能读取文件,若文件不存在会报错
'w'写模式若文件存在则清空内容,不存在则创建新文件
'a'追加模式若文件存在则在末尾添加内容,不存在则创建
'b'二进制模式用于处理图片、视频等非文本文件,需与其他模式组合(如 'rb'、'wb')
'+'读写模式可同时读写文件,需与其他模式组合(如 'r+'、'a+')

2️⃣ open () 的完整语法

实际开发中可能需要更精细的控制,open()的完整参数如下:

python

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

1.关键参数补充说明:

  • encoding:指定文件编码格式,处理中文文件时必须设置为utf-8,否则可能出现乱码。
  • buffering:设置缓冲策略,默认值-1表示使用系统默认缓冲,0表示无缓冲(仅二进制模式可用),1表示行缓冲(仅文本模式可用)。
  • errors:定义编码错误的处理方式,如errors='ignore'表示忽略编码错误(谨慎使用)。

| 手动open | ```python
file = open('example.txt', 'r', encoding='utf-8')
try:content = file.read()
finally:file.close()  # 必须手动关闭
``` | 灵活控制关闭时机 | 容易遗漏close(),导致资源问题 |### 1.4 必学:文件路径的正确写法
文件路径错误是初学者最常见的问题之一,路径分为两种类型:
- **相对路径**:相对于当前Python脚本运行的目录。例如,脚本在`D:\py_project`目录下,要打开该目录下`data`文件夹中的`example.txt`,路径写为`data/example.txt`。
- **绝对路径**:从系统根目录开始的完整路径。例如,`D:\py_project\data\example.txt`(Windows)或`/home/user/py_project/data/example.txt`(Linux/macOS)。> 小贴士:Windows系统中路径分隔符是`\`,但在Python中需写为`\\`(转义)或直接用`/`(Python跨平台支持),避免语法错误。## 二、操作核心:Python3的file对象
通过`open()`函数获得`file`对象后,所有文件操作都依赖它的方法。下表整理了最常用的13个方法,按使用频率排序:| 序号 | 方法 | 功能描述 |
|------|------|----------|
| 1 | `file.read([size])` | 读取文件内容:无参数时读取全部内容,指定`size`则读取对应字节数,返回字符串(文本模式)或字节流(二进制模式)。 |
| 2 | `file.readline([size])` | 读取一行内容(包含换行符`\n`),适合处理大文件(占用内存小),返回字符串。 |
| 3 | `file.readlines([sizeint])` | 读取所有行,返回列表(每行作为一个元素),大文件使用会占用较多内存。 |
| 4 | `file.write(str)` | 写入字符串到文件,返回写入的字符长度(文本模式);二进制模式需写入字节流(如`b"hello"`)。 |
| 5 | `file.writelines(sequence)` | 写入字符串列表,需手动添加换行符(如`["line1\n", "line2\n"]`)。 |
| 6 | `file.close()` | 关闭文件,关闭后无法再操作(`with open`会自动调用)。 |
| 7 | `file.seek(offset[, whence])` | 移动文件指针到指定位置:`offset`是偏移量,`whence=0`(默认,从文件开头算)、`1`(从当前位置算)、`2`(从文件末尾算)。 |
| 8 | `file.tell()` | 返回当前文件指针的位置(字节数)。 |
| 9 | `file.flush()` | 强制刷新缓冲区,将内存中的数据写入文件(无需等待缓冲区满)。 |
| 10 | `file.truncate([size])` | 截断文件:指定`size`则保留前`size`个字符,无参数则从当前指针位置截断。 |
| 11 | `file.fileno()` | 返回文件描述符(整数),用于底层系统操作(如OS模块)。 |
| 12 | `file.isatty()` | 判断文件是否连接到终端设备,返回布尔值(通常用于判断是否为控制台输入)。 |
| 13 | `file.next()` | Python3中已废弃,改用`next(iter(file))`读取下一行。 |### 重点区分:read()、readline()、readlines()
这三个方法都用于读取文件,但适用场景不同,初学者容易混淆,通过实例对比理解:假设`a.txt`文件内容如下:

HelloWelcomeWhat is the python...

plaintext


#### 1. read():读取全部内容
```python
with open('a.txt', 'r', encoding='utf-8') as file:content = file.read()
print(content)
# 输出:
# Hello
# Welcome
# What is the python...
print(type(content))  # <class 'str'>

适用场景:小文件,需一次性获取全部内容。

2. readline ():逐行读取

python

运行

with open('a.txt', 'r', encoding='utf-8') as file:line1 = file.readline()line2 = file.readline()
print(line1)  # Hello\n
print(line2)  # Welcome\n

适用场景:大文件,避免一次性加载占用过多内存(可配合while循环读取所有行)。

3. readlines ():读取所有行到列表

python

运行

with open('a.txt', 'r', encoding='utf-8') as file:lines = file.readlines()
print(lines)  # ['Hello\n', 'Welcome\n', 'What is the python...\n']

适用场景:需按行处理文件(如逐行分析日志),且文件大小适中。

三、实战场景:文件操作的常见用法

掌握基础方法后,结合实际场景才能真正学会运用。以下是两个最常用的场景:

1️⃣配置文件的读取与写入

程序的配置信息(如数据库地址、用户账号)通常存储在文本文件中,通过文件操作实现 “读取配置” 和 “更新配置”。

示例:操作 config.txt 配置文件

python

# 1. 读取配置
config_path = 'config.txt'
with open(config_path, 'r', encoding='utf-8') as file:current_config = file.read()
print("当前配置:", current_config)# 2. 更新配置(覆盖原内容)
new_config = "user=admin\npassword=123456\nserver=localhost:3306"
with open(config_path, 'w', encoding='utf-8') as file:file.write(new_config)
print("配置已更新!")# 3. 追加配置(不覆盖原内容)
extra_config = "\ntimeout=30"
with open(config_path, 'a', encoding='utf-8') as file:file.write(extra_config)
print("额外配置已追加!")

2️⃣程序日志的记录

程序运行时的状态(如 “启动成功”)、错误信息(如 “连接失败”)需要记录到日志文件,便于调试和维护。日志通常用追加模式('a') 写入,避免覆盖历史记录。

示例:记录 app.log 日志

python

import datetime  # 用于添加时间戳log_path = 'app.log'
# 获取当前时间(格式:年-月-日 时:分:秒)
current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")# 追加日志内容
with open(log_path, 'a', encoding='utf-8') as file:file.write(f"[{current_time}] INFO: 程序启动成功\n")file.write(f"[{current_time}] ERROR: 数据库连接超时\n")print("日志已记录!")

打开app.log会看到:

plaintext

[2024-05-20 15:30:00] INFO: 程序启动成功
[2024-05-20 15:30:05] ERROR: 数据库连接超时

四、扩展工具:Python3 的 OS 模块

文件操作不仅限于 “读写内容”,还包括创建目录、删除文件、遍历文件夹等系统级操作。Python 的os模块提供了这些功能,是文件操作的重要补充。

1️⃣基础文件与目录操作

os模块的核心函数,覆盖日常 90% 的系统操作需求:

函数功能示例
os.mkdir(path)创建单个目录os.mkdir('new_dir')(创建 new_dir 文件夹)
os.rmdir(path)删除空目录(非空目录会报错)os.rmdir('new_dir')
os.rename(old, new)重命名文件 / 目录os.rename('old.txt', 'new.txt')
os.remove(path)删除文件(不能删除目录)os.remove('unused.txt')
os.getcwd()获取当前工作目录print(os.getcwd())(输出如D:\py_project
os.chdir(path)切换工作目录os.chdir('D:\py_project')
os.listdir(path)列出目录下所有文件 / 目录os.listdir('.')(列出当前目录内容,返回列表)

2️⃣高级操作:遍历目录树(os.walk ())

当需要处理 “目录及其所有子目录” 时,os.walk()是最高效的工具。它会生成一个生成器,逐一生成每个目录的信息(路径、子目录、文件),避免一次性加载所有内容。

语法与示例

python

import os# 遍历指定目录(此处为当前目录'.')
for root, dirs, files in os.walk('.', topdown=True):# root:当前遍历的目录路径# dirs:当前目录下的所有子目录列表# files:当前目录下的所有文件列表print(f"当前目录:{root}")print(f"子目录:{dirs}")print(f"文件:{files}")print("-" * 50)

参数说明:

  • top:要遍历的根目录路径。
  • topdown=True:默认 “自上而下” 遍历(先根目录,再子目录);设为False则 “自下而上”。
  • onerror:可选,用于处理遍历中的错误(如权限不足)。

3️⃣路径处理神器:os.path 模块

os.pathos模块的子模块,专门解决路径拼接、判断路径有效性等问题,跨平台兼容性极强(自动适配 Windows/Linux/macOS 的路径格式)。

常用函数示例:

python

import os# 1. 路径拼接(避免手动写分隔符)
dir_path = 'data'
file_name = 'example.txt'
full_path = os.path.join(dir_path, file_name)
print(full_path)  # Windows输出data\example.txt,Linux输出data/example.txt# 2. 判断路径是否存在
print(os.path.exists(full_path))  # True(存在)/False(不存在)# 3. 判断是否为文件/目录
print(os.path.isfile(full_path))  # True(是文件)
print(os.path.isdir(dir_path))    # True(是目录)# 4. 获取文件的绝对路径
print(os.path.abspath(full_path))  # 输出完整绝对路径# 5. 分离文件名与目录
dir_part, file_part = os.path.split(full_path)
print(dir_part)  # data
print(file_part) # example.txt# 6. 获取文件扩展名
print(os.path.splitext(file_part)[1])  # .txt

4️⃣其他实用功能

  • 环境变量操作:通过os.environ获取或设置环境变量,如os.environ.get('HOME')(获取用户主目录)、os.environ['NEW_VAR'] = 'value'(设置新环境变量)。
  • 执行系统命令:os.system(cmd)执行系统命令(如os.system('dir')在 Windows 中列出目录内容),但返回值是命令执行状态码,如需获取命令输出,可使用os.popen(cmd).read()
  • 文件权限管理:os.stat(path)获取文件状态(如权限、大小),os.chmod(path, mode)修改文件权限(如os.chmod('file.txt', 0o755)设置读写执行权限)。

五、总结与学习建议

Python 文件操作的核心逻辑可总结为:通过open()获取 file 对象 → 用 file 对象方法操作内容 → 用 OS 模块处理系统级文件 / 目录 → 优先使用with openos.path保证安全与跨平台。

对于初学者,建议按以下步骤练习:

  1. 先掌握open()r/w/a模式,用with open完成简单的读写。
  2. 区分read()/readline()/readlines()的用法,处理不同大小的文件。
  3. 学习os模块的基础操作(创建目录、重命名文件),再尝试os.walk()遍历目录。
  4. os.path替代手动拼接路径,培养跨平台思维。

通过 “配置文件读写”“日志记录”“批量处理文件” 等小项目实践,能快速巩固这些知识,让文件操作从 “理论” 变成 “技能”。

http://www.dtcms.com/a/412367.html

相关文章:

  • 济源网站优化网页升级紧急通知中
  • 桂林论坛网网站电话郑州外贸网站制作
  • Gin 框架令牌桶限流实战指南
  • php做自己的网站百度浏览器网页版
  • 珠海网站建设找哪家电子政务与网站建设方面
  • LeetCode:60.单词搜索
  • 给一个网站风格做定义怎样在微信中做网站
  • JxBrowser 7.44.1 版本发布啦!
  • 代运营公司是怎么运营的安徽网站seo公司
  • 完整教程:从0到1在Windows下训练YOLOv8模型
  • c2c商城网站开发企业宣传方式
  • 网站图片的暗纹是怎么做的楼盘网站建设方案ppt
  • 免费的代码分享网站龙岩做网站公司在哪里
  • 黑马八股笔记
  • MQTT 会话 (Session) 详解
  • 网站强制使用极速模式ppt超级市场
  • 17.zwd一起做网站池尾站安卓下载软件app
  • qq自动发货平台网站怎么做wordpress动态文章页模板下载
  • 龙芯在启动参数里添加串口信息
  • 网站域名spacewordpress 打开很慢
  • 收到短信说备案被退回但工信部网站上正常啊wordpress自动缩略图
  • 目前做网站最流行的程序语言网站出问题
  • 上海网站营销seo怎么查看网站是哪个公司建的
  • Stata语法详解:从入门到精通
  • 专门做当归的网站网站文章不收录怎么做
  • 正规网站建设服务中心开发企业app公司
  • 新手搭建做网站简洁型网页
  • 深度学习------专题《图像处理项目》
  • 阿里云iis放网站织梦系统怎么做单页网站
  • 企业网站推广 知乎wordpress媒体库在哪