Python:文件管理
Python:文件管理
- 一.文件
- 1.定义
- 2.特点
- 3.文件路径
- 3.1 定义
- 3.2 分类
- 3.3 组成部分
- 二.文件操作
- 1.打开和关闭文件
- 打开文件
- 关闭文件
- 示例代码
- 二.Python中文件打开次数有限
- 文件描述符
- 资源占用
- 解决办法
- 三.写文件
- python 中写文件的核心方法
- 1. 基础步骤
- 2. 核心打开模式(写入相关)
- 3. 常用写入操作方式
- 4. 关键注意事项
- 示例代码
- 四.小练习:写入100以内的质数
一.文件
1.定义
在计算机中,文件是具有符号名的、在逻辑上具有完整意义的一组相关信息项的有序序列。
从代码的角度来看,文件是存储在磁盘或其他存储设备上的数据集合,可以通过编程接口(如 Python 中的open()
函数)进行读取和写入操作。
2.特点
- 文件名:用于标识文件的唯一名称,通常包含扩展名(如
.txt
、.py
等)。 - 路径:文件在文件系统中的位置,如
D:/text.txt
。 - 内容:文件中存储的实际数据,可以是文本、二进制数据等。
- 操作:可以对文件进行打开、读取、写入、关闭等操作。
3.文件路径
3.1 定义
文件路径是文件在文件系统中的位置标识,用于准确定位和访问存储设备上的文件。
3.2 分类
- 绝对路径:从文件系统根目录开始的完整路径。
- Windows 示例:
D:/text.txt
(从 D 盘根目录开始) - Linux/macOS 示例:
/home/user/document.txt
(从根目录/
开始)
- Windows 示例:
- 相对路径:相对于当前工作目录的路径。
- 示例 1:当前目录为
D:/project
时,text.txt
对应D:/project/text.txt
- 示例 2:子目录文件路径
data/text.txt
- 示例 1:当前目录为
3.3 组成部分
- 驱动器标识符(Windows):如
C:
、D:
,指定所在磁盘。 - 目录分隔符:Windows 用
\
,Linux/macOS 用/
,分隔目录层级。 - 目录名:路径中的各级目录名称,体现层级结构。
- 文件名:含扩展名的文件标识(如
text.txt
中,text
为文件名,.txt
为扩展名)。
二.文件操作
1.打开和关闭文件
打开文件
- 使用
open()
函数:这是 Python 中打开文件最常用的方式。open()
函数接受两个主要参数,即文件路径和打开模式。文件路径可以是绝对路径(如D:/text.txt
),也可以是相对路径(相对于当前工作目录)。打开模式有多种,常见的有:'r'
:只读模式,用于读取文件内容。'w'
:写入模式,用于创建新文件或覆盖已有文件。'a'
:追加模式,用于在已有文件末尾添加内容。'x'
:独占创建模式,用于创建新文件,如果文件已存在则会报错。'b'
:二进制模式,与其他模式结合使用,如'rb'
表示以二进制只读模式打开文件。't'
:文本模式,是默认模式,与其他模式结合使用,如'rt'
表示以文本只读模式打开文件(通常可省略't'
,直接写'r'
)。
- 文件对象:
open()
函数执行成功后会返回一个文件对象,通过这个文件对象可以进行后续的文件操作,如读取、写入等。
关闭文件
- 使用
close()
方法:当对文件的操作完成后,需要关闭文件以释放系统资源。可以通过文件对象调用close()
方法来关闭文件。 - 重要性:如果不关闭文件,可能会导致文件资源被占用,无法被其他程序访问,甚至可能会丢失数据(在写入操作时)。
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()