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

Python:文件管理

Python:文件管理

  • 一.文件
    • 1.定义
    • 2.特点
    • 3.文件路径
      • 3.1 定义
      • 3.2 分类
      • 3.3 组成部分
  • 二.文件操作
    • 1.打开和关闭文件
      • 打开文件
      • 关闭文件
      • 示例代码
  • 二.Python中文件打开次数有限
      • 文件描述符
      • 资源占用
      • 解决办法
  • 三.写文件
      • python 中写文件的核心方法
      • 1. 基础步骤
      • 2. 核心打开模式(写入相关)
      • 3. 常用写入操作方式
      • 4. 关键注意事项
      • 示例代码
  • 四.小练习:写入100以内的质数

一.文件

1.定义

在计算机中,文件是具有符号名的、在逻辑上具有完整意义的一组相关信息项的有序序列。
从代码的角度来看,文件是存储在磁盘或其他存储设备上的数据集合,可以通过编程接口(如 Python 中的open()函数)进行读取和写入操作。

2.特点

  1. 文件名:用于标识文件的唯一名称,通常包含扩展名(如.txt.py等)。
  2. 路径:文件在文件系统中的位置,如D:/text.txt
  3. 内容:文件中存储的实际数据,可以是文本、二进制数据等。
  4. 操作:可以对文件进行打开、读取、写入、关闭等操作。

3.文件路径

3.1 定义

文件路径是文件在文件系统中的位置标识,用于准确定位和访问存储设备上的文件。

3.2 分类

  • 绝对路径:从文件系统根目录开始的完整路径。
    • Windows 示例:D:/text.txt(从 D 盘根目录开始)
    • Linux/macOS 示例:/home/user/document.txt(从根目录 / 开始)
  • 相对路径:相对于当前工作目录的路径。
    • 示例 1:当前目录为 D:/project 时,text.txt 对应 D:/project/text.txt
    • 示例 2:子目录文件路径 data/text.txt

3.3 组成部分

  • 驱动器标识符(Windows):如 C:D:,指定所在磁盘。
  • 目录分隔符:Windows 用 \,Linux/macOS 用 /,分隔目录层级。
  • 目录名:路径中的各级目录名称,体现层级结构。
  • 文件名:含扩展名的文件标识(如 text.txt 中,text 为文件名,.txt 为扩展名)。

二.文件操作

1.打开和关闭文件

打开文件

  1. 使用 open() 函数:这是 Python 中打开文件最常用的方式。open() 函数接受两个主要参数,即文件路径和打开模式。文件路径可以是绝对路径(如 D:/text.txt),也可以是相对路径(相对于当前工作目录)。打开模式有多种,常见的有:
    • 'r':只读模式,用于读取文件内容。
    • 'w':写入模式,用于创建新文件或覆盖已有文件。
    • 'a':追加模式,用于在已有文件末尾添加内容。
    • 'x':独占创建模式,用于创建新文件,如果文件已存在则会报错。
    • 'b':二进制模式,与其他模式结合使用,如 'rb' 表示以二进制只读模式打开文件。
    • 't':文本模式,是默认模式,与其他模式结合使用,如 'rt' 表示以文本只读模式打开文件(通常可省略 't',直接写 'r')。
  2. 文件对象open() 函数执行成功后会返回一个文件对象,通过这个文件对象可以进行后续的文件操作,如读取、写入等。

关闭文件

  1. 使用 close() 方法:当对文件的操作完成后,需要关闭文件以释放系统资源。可以通过文件对象调用 close() 方法来关闭文件。
  2. 重要性:如果不关闭文件,可能会导致文件资源被占用,无法被其他程序访问,甚至可能会丢失数据(在写入操作时)。
  3. with 语句(推荐):虽然可以手动调用 close() 方法关闭文件,但更推荐使用 with 语句。with 语句会在代码块执行完毕后自动关闭文件,即使在代码块执行过程中出现异常也能保证文件被正确关闭。其语法结构为 with open(文件路径, 打开模式) as 文件对象: # 进行文件操作

示例代码

#  基本的文件打开与关闭演示
f = open("D:/text.txt", "r")
print(f)           # 打印文件对象
print(type(f))     # 打印文件对象类型
f.close()          # 手动关闭文件with open("D:/text.txt", "r") as f:  # with语句自动处理文件打开和关闭print(f)           # 打印文件对象print(type(f))     # 打印文件对象类型
# 代码块结束后,文件会自动关闭,无需手动调用f.close()

二.Python中文件打开次数有限

文件描述符

  • 系统为每个进程可打开的文件描述符数量设限,Python 打开文件会消耗该资源。
  • 超限会触发 “Too many open files” 异常。

资源占用

  • 打开文件会占用内存存储文件信息,大量打开不及时关闭会致内存过高。
  • 过多占用会影响其他进程使用文件描述符。

解决办法

  • 及时调用 close() 关闭文件,或用 with 语句自动管理。
  • 可批量分组处理文件,或谨慎调整系统文件描述符限制。
#  多次打开并关闭文件(注意:实际应用中不建议这样做)
flist = []
cnt = 0
# 限制循环次数为5次,避免过多打开文件
while cnt < 5:f = open("d:/text.txt", "r")  # 使用绝对路径打开文件flist.append(f)f.close()  # 每次打开后立即手动关闭文件cnt += 1print(f"打开并关闭文件的个数: {cnt}")# 再次检查并关闭可能未关闭的文件(冗余保障)
for file in flist:if not file.closed:file.close()

三.写文件

python 中写文件的核心方法

写文件是将数据从内存保存到存储设备的过程,主要通过指定文件路径、选择打开模式、调用写入操作实现,具体方法和注意事项如下:

1. 基础步骤

  • 打开文件:使用 open() 函数指定文件路径和写入模式,获取文件对象。
  • 执行写入:通过文件对象的写入方法,将内存中的数据(如字符串、文本内容)写入文件。
  • 关闭文件:完成写入后关闭文件,释放系统资源(或用 with 语句自动关闭)。

2. 核心打开模式(写入相关)

  • 'w'(写入模式)
    • 若文件不存在,创建新文件;若文件已存在,清空原有内容后写入新数据。
    • 适用于完全覆盖原有内容的场景(如生成新文件、替换全部内容)。
  • 'a'(追加模式)
    • 若文件不存在,创建新文件;若文件已存在,在原有内容末尾追加新数据,不覆盖原有内容。
    • 适用于持续添加内容的场景(如日志记录、累加数据)。

3. 常用写入操作方式

  • 单次写入:用 write() 方法写入字符串或二进制数据(需确保数据格式与打开模式匹配,文本模式写字符串,二进制模式写字节流)。
  • 多行写入:用 writelines() 方法批量写入可迭代对象(如列表中的多行文本),需手动添加换行符 \n

4. 关键注意事项

  • 数据格式:文本模式(默认)只能写入字符串,二进制模式需写入字节数据(如用 encode() 转换字符串为字节)。
  • 缓冲区刷新:写入数据会先存到缓冲区,关闭文件或调用 flush() 方法可强制刷新到磁盘,避免数据丢失。
  • 资源安全:推荐用 with 语句打开文件,确保代码块结束后自动关闭,即使出错也能释放资源。

示例代码

## 写入和追加内容到文件
f = open("D:/text.txt", "w")  # 写入模式(覆盖原有内容)
f.write("hello ")
f.close()  # 完成写入后关闭f = open("D:/text.txt", "a")  # 追加模式
f.write("world")
f.close()  # 完成追加后关闭# 读取文件内容
f = open("D:/text.txt", "r")
print(f.read())  # 打印文件内容
f.close()  # 完成读取后关闭## 定义要写入的多行内容(列表形式,需手动添加换行符)
lines = ["第一行内容\n","第二行内容\n","第三行内容\n","第四行内容"  # 最后一行可省略换行符,根据需求决定
]# 使用 with 语句打开文件('w' 模式),自动管理关闭
with open("example.txt", "w", encoding="utf-8") as f:# 用 writelines() 批量写入列表中的多行内容f.writelines(lines)

四.小练习:写入100以内的质数

# 写入100以内的质数
f = open("D:/text.txt", "w")
for num in range(2, 101):# 假设当前数是质数is_prime = True# 检查是否能被2到num的平方根之间的数整除for i in range(2, int(num** 0.5) + 1):if num % i == 0:is_prime = Falsebreak# 如果是质数则写入文件if is_prime:f.write(str(num) + "\n")
f.close()  # 完成写入后关闭#  再次读取文件内容
f = open("D:/text.txt", "r")
print(f.read())
f.close()
http://www.lryc.cn/news/612094.html

相关文章:

  • 玳瑁的嵌入式日记D13-0806(C语言)
  • 【运维进阶】DHCP服务配置和DNS域名解析
  • TypeScript ActionScript
  • 浅谈RNN被Transformer 取代的必然性
  • Kotlin Native调用C curl
  • Uniapp生物识别(SOTER)
  • 【第5话:相机模型1】针孔相机、鱼眼相机模型的介绍及其在自动驾驶中的作用及使用方法
  • 第二十六天(数据结构:树(补充版程序请看下一篇))
  • 数字图像处理(冈萨雷斯)第三版:第四章——空间滤波与频域滤波(平滑与锐化)——主要内容和重点
  • 【PHP 抽象类完全指南(含 PHP 8.4 新特性)】
  • 02.【数据结构-C语言】顺序表(线性表概念、顺序表实现:增删查、前向声明、顺序表实现通讯录项目:增删改查、通讯录数据导入及保存到本地文件)
  • Linux操作系统启动项相关研究与总结
  • Redis面试精讲 Day 12:Redis Sentinel哨兵机制详解
  • 深度学习(pytorch版)前言:环境安装和书籍框架介绍
  • 单变量单步时序预测:CNN-GRU卷积神经网络结合门控循环单元
  • Linux系统编程——环境变量、命令行参数
  • mysql8.0主从节点克隆
  • Numpy科学计算与数据分析:Numpy入门之多平台安装与基础环境配置
  • 用NAS如何远程访问:详细教程与实用技巧
  • 强强联合:OpenAI正式登陆AWS!
  • 【motion】标签体系设计与检索 1:HumanML3D 和 KIT Motion-Language(KITML)
  • 《Vue 3与Element Plus构建多语后台的深层架构》
  • 导入Excel打印
  • GEAR:一种高效的 KV Cache 压缩方法,用于几乎无损的大语言模型生成式推理
  • 云手机对于网络游戏的作用
  • linux下的串口通信原理及编程实例
  • 【完整源码+数据集+部署教程】耳镜耳部疾病分类系统源码和数据集:改进yolo11-HSFPN
  • Centos 安装 redis
  • 理解生成统一模型技术调研报告
  • 北京-4年功能测试2年空窗-报培训班学测开-第六十九天-投简历第一天-从兴奋到害怕