二 .操作文件
文件操作主要针对字符文件(二进制文件操作后续章节介绍 ),进行文件操作需遵循 打开文件 → 操作文件 → 关闭文件 这三个步骤。
(1)打开文件
在 Python 里,我们借助 open()
函数来打开文件,其使用形式如下:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
功能与约束
- 功能:建立程序和文件的通道,让程序获得操作文件的权限,和操作系统里手动 “打开文件” 不是一回事。
- 约束:代码操作文件时,别同时用操作系统手动操作文件,不然容易冲突报错。
关键参数说明
参数 | 说明 |
---|---|
file | 要打开的文件路径(得包含完整文件名 ),数据类型是字符串。 |
mode | 文件打开模式,决定能对文件做啥操作(读、写等 ),常见模式见下表。 |
encoding | 文本模式下用,指定文件编码(像 utf-8 gbk ),二进制模式不用。 |
errors | 编码错误咋处理(比如 ignore 就是忽略错误 ),二进制模式时无效。 |
newline | 文本模式下,控制换行符咋处理(像 \n \r\n )。 |
常见 mode
模式
模式 | 描述 |
---|---|
r | 只读,文件不存在就报错;存在就只能读内容。 |
w | 覆盖写,文件不存在新建;存在就清空原来内容重新写。 |
x | 创建写,文件不存在新建并写;存在就报错。 |
a | 追加写,文件不存在新建;存在就在末尾接着写。 |
r+ | 读写,文件得存在,支持读和写操作。 |
w+ | 读写,文件不存在新建;存在就清空,支持读和写。 |
a+ | 读写,文件不存在新建;存在就末尾追加,支持读和写。 |
# 1. 打开文件(用 r 模式,只读 )
file = open(r"E:\书代码\第7章\编程语言概述.txt", 'r', encoding='utf-8')
# 2. 操作文件(这里简单打印文件对象,实际要结合读/写方法 )
print(file)
# 3. 关闭文件(释放资源 )
file.close()
(2)打开模式代码示例
1. w
覆盖写模式(批量创建文件 )
for i in range(1, 101):
path = r"E:\书代码\第7章\数据\数据" + str(i) + ".txt"
f = open(path, 'w')
f.close()
作用:循环 100 次,创建 数据1.txt
到 数据100.txt
这些文件。
2. x
创建写模式(得确保文件不存在 )
# 要是文件已经存在,执行会报 FileExistsError 错
for i in range(1, 101):
path = r"E:\书代码\第7章\数据2\数据" + str(i) + ".txt"
f = open(path, 'x')
f.close()
# 修正:换路径/文件名重新创建
for i in range(1, 101):
path = r"E:\书代码\第7章\数据2\新数据" + str(i) + ".txt"
f = open(path, 'x')
f.close()
3. a
追加写模式(在文件末尾追加内容 )
f = open(r"E:\书代码\第7章\a.txt", 'a', encoding='utf-8')
f.write('提高办公效率')
f.close()
4. +
增加模式(和基础模式结合,扩展读写 )
# r+ 模式:支持读写
f = open(r"E:\书代码\第7章\a.txt", 'r+', encoding='utf-8')
print(f.read()) # 读文件内容
f.write(',每日学习一个新技能') # 写内容到文件
f.close()
(3)open()
复合写法(with
语法 )
为解决 “忘记关闭文件” 问题,Python 提供 with
语法自动管理资源,用法如下:
with open(参数) as 变量名:
# 操作文件(缩进里执行,结束自动关闭 )
变量名.方法()
示例(读取文件内容 ):
with open(r"E:\书代码\第7章\编程语言概述.txt", 'r', encoding='utf-8') as f:
print(f.read())
4)读取文件
得先以 读模式(像 r
r+
) 打开文件,再用下面这些方法读取内容。
1. read()
方法
语法:文件对象.read(size=-1)
size
:选填,指定读size
个字符;默认-1
读全部内容。- 返回:字符串类型的文件内容。
示例:
# 读全部内容
f = open(r"E:\书代码\第7章\编程语言概述.txt", 'r', encoding='utf-8')
print(f.read())
f.close()
# 读前 10 个字符
f = open(r"E:\书代码\第7章\编程语言概述.txt", 'r', encoding='utf-8')
print(f.read(10))
f.close()
2. readline()
方法
语法:文件对象.readline(size=-1)
功能:读一行内容;size
选填,指定读该行前 size
个字符。
返回:字符串类型的一行内容。
示例:
# 读第一行
f = open(r"E:\书代码\第7章\编程语言概述.txt", 'r', encoding='utf-8')
print(f.readline())
f.close()
# 读一行前 6 个字符
f = open(r"E:\书代码\第7章\编程语言概述.txt", 'r', encoding='utf-8')
print(f.readline(6))
f.close()
3. readlines()
方法
语法:文件对象.readlines(hint=-1)
- 功能:读所有行,返回列表(每行内容是列表里的元素 );
hint
选填,按字符数限制读行。 - 返回:列表类型的文件内容。
示例:
f = open(r"E:\书代码\第7章\编程语言概述.txt", 'r', encoding='utf-8')
print(f.readlines()) # 读所有行,返回列表
f.close()
4. for
循环遍历文件
逐行读文件(不用担心大文件占内存问题 ),示例:
f = open(r"E:\书代码\第7章\编程语言概述.txt", 'r', encoding='utf-8')
for line in f:
print(line, end='') # end='' 取消 print 自动换行
f.close()
(5)写入文件
得先以 写模式(像 w
a
w+
等 ) 打开文件,再用下面方法写内容。
1. write()
方法
语法:文件对象.write(text)
text
:要写入的字符串内容。- 返回:写入的字符数量。
示例(覆盖写 ):
f = open(r"E:\书代码\第7章\编程语言概述.txt", 'w', encoding='utf-8')
f.write('我正在学习Python') # 覆盖原有内容
f.close()
2. writelines()
方法
语法:文件对象.writelines(lines)
lines
:字符串列表(元素得是字符串 ),写入时不会自动加换行符。- 返回:
None
。
示例(处理路径转义问题 ):
# 原错误写法(路径里的 \a 会被转义 )
# f = open(r"E:\书代码\第7章\a7.txt", 'w', encoding='utf-8')
# 修正(用 \\ 或者 / 处理路径 )
f = open(r"E:\书代码\第7章\\a7.txt", 'w', encoding='utf-8')
ls = ['zhangsan', 'lisi', 'wangwu']
f.writelines(ls) # 把列表内容写入文件(没有换行 )
f.close()