Python文件操作详解:从基础读写到目录管理
本文详细解析Python中的文件操作机制,涵盖文本与二进制文件区别、open函数参数详解、缓冲区原理,以及read/readline/readlines等读取方法。同时介绍write写入、flush刷新及文件指针管理,并演示使用os模块进行重命名、删除、目录创建等系统级操作,帮助开发者掌握完整的文件处理技能。
Python文件操作概述
程序运行期间,变量、序列和对象是存储数据的便捷方式,但这些数据仅存在于内存中,程序终止后便会丢失。若需让数据在程序结束后依然保存,必须将数据持久化到文件中。
Python内置了文件对象及操作文件和目录的模块,利用这些工具可以便捷地将数据保存至文本文件等各类文件中。
文件的基本概念
一、文件的概念
在计算机系统中,文件以二进制形式存储在磁盘上。
文件主要划分为文本文件和二进制文件两类。
1、文本文件
这类文件可通过文本编辑软件查看,尽管其本质仍是二进制数据,例如Python源代码文件。
2、二进制文件
二进制文件的内容并非供人类直接阅读,而是供其他软件解析使用,如图片、音频和视频文件。此类文件无法通过文本编辑软件直接查看。
Python提供了多种文件操作方式,常见操作包括创建、删除、修改权限、读取和写入等。这些操作大致可分为两类:
删除与修改权限:针对文件本身进行,属于系统级操作。 写入与读取:针对文件内容进行操作,是文件最常用的应用级操作。
文件的基本操作步骤
二、文件的基本操作
1、操作文件的步骤
文件的应用级操作通常包含以下三个步骤,每一步均需借助相应函数实现:
打开文件:使用open()函数,该函数返回一个文件对象;
对已打开的文件执行读/写操作:读取内容可使用read()、readline()及readlines()函数;写入内容则使用write()函数。
关闭文件:完成读/写操作后,必须调用close()函数关闭文件。
open函数与打开模式详解
2、打开文件的方式
在Python中操作文件,首先需创建或打开指定文件并生成文件对象,这可通过内置的open()函数完成。
语法如下:
- file = open(file_name [, mode='r' [ , buffering=-1 [ , encoding = None ]]])
- file:表示创建的文件对象。
- file_name:指定要创建或打开的文件名称。
- mode:指定文件的打开模式,默认为只读(r)模式。
- buffering:指定读写操作时是否使用缓冲区。
- encoding:手动设定打开文件时的编码格式,不同平台默认值不同,例如Windows默认为cp936(即GBK编码)。
打开文件的常用模式
| 模式 | 说明 |
|---|---|
| r | 以只读方式打开文件。文件的指针将会放在文件的开头,这是默认模式。如果文件不存在,抛出异常 |
| w | 以只写方式打开文件。如果文件存在会被覆盖。如果文件不存在,创建新文件 |
| a | 以追加方式打开文件。如果该文件已存在,文件指针将会放在文件的结尾。如果文件不存在,创建新文件进行写入 |
| r+ | 以读写方式打开文件。文件的指针将会放在文件的开头。如果文件不存在,抛出异常 |
| w+ | 以读写方式打开文件。如果文件存在会被覆盖。如果文件不存在,创建新文件 |
| a+ | 以读写方式打开文件。如果该文件已存在,文件指针将会放在文件的结尾。如果文件不存在,创建新文件进行写入 |
文件打开方式

open()是否需要缓冲区
通常建议在使用open()函数时保持缓冲区开启,即不修改buffering参数的默认值。
若buffering参数值为0(或False),表示打开文件时不使用缓冲区;若值为大于1的整数,则该整数指定缓冲区大小(单位:字节);若值为负数,则使用默认缓冲区大小。
目前计算机内存的I/O速度远高于外设(如键盘、鼠标、硬盘)的I/O速度。若不使用缓冲区,程序执行I/O操作时,内存与外设需同步读写,即内存必须等待外设输入(输出)一个字节后才能继续,导致程序大部分时间处于等待状态。
使用缓冲区时,程序执行输出操作会将数据先写入缓冲区,随后继续执行其他操作,由外设自行读取处理;执行输入操作时,先等待外设将数据读入缓冲区,无需与外设同步读写。
文件读取方法:read与readline
3、read 方法 —— 读取文件
read方法可一次性读入并返回文件的所有内容。
read() 函数的基本语法格式如下:
file.read([size])
其中,file表示已打开的文件对象;size为可选参数,指定一次最多读取的字符(字节)数,省略时默认一次性读取所有内容。
若忘记关闭文件,会导致系统资源消耗,并影响后续对文件的访问。
注意:read方法执行后,文件指针会移动到文件末尾。
示例:
# 1. 打开 - 文件名需要注意大小写 file = open("README")
# 2. 读取 text = file.read() print(text)
# 3. 关闭 file.close()
在开发中,通常先编写打开和关闭的代码,再编写中间针对文件的读/写操作。
4、按行读取文件内容
read方法默认将文件所有内容一次性读取到内存。
若文件过大,会严重占用内存。
readline方法可一次读取一行内容,包含末尾的换行符“\n”。方法执行后,文件指针移动至下一行,准备再次读取。
file.readline([size])
其中,file为打开的文件对象;size为可选参数,指定读取每一行时一次最多读取的字符(字节)数。
读取大文件的正确姿势
# 打开文件
file = open("README")
while True:
# 读取一行内容
text = file.readline()
# 判断是否读到内容
if not text:
break
# 每读取一行的末尾已经有了一个 `\n`
print(text, end="")
# 关闭文件
file.close()
示例:
小文件复制
# 1. 打开文件
file_read = open("README")
file_write = open("README[复件]", "w")
# 2. 读取并写入文件
text = file_read.read()
file_write.write(text)
# 3. 关闭文件
file_read.close()
file_write.close()
大文件复制
# 1. 打开文件
file_read = open("README")
file_write = open("README[复件]", "w")
# 2. 读取并写入文件
while True:
# 每次读取一行
text = file_read.readline()
# 判断是否读取到内容
if not text:
break
file_write.write(text)
# 3. 关闭文件
file_read.close()
file_write.close()
对于按行读取文件,还有readlines()函数。
readlines()函数用于读取文件中的所有行,与调用不指定size参数的read()函数类似,但该函数返回一个字符串列表,每个元素为文件中的一行内容。
与readline()函数一样,readlines()函数在读取每一行时,会连同行尾的换行符一块读取。
文件指针的管理与影响
5、文件指针
文件指针可理解为标记,指示从哪个位置开始读取数据。
首次打开文件时,文件指针通常指向文件开始位置;执行read方法后,文件指针默认移动至读取内容的末尾。
如果执行了一次read方法读取了所有内容,再次调用read方法还能获得内容吗?
答案是不能。第一次读取后,文件指针已移动至文件末尾,再次调用不会读取到任何内容。
# 首先在 README 文件中写了8个1 # 1. 打开 - 文件名需要注意大小写 file = open("README") # 2. 读取 text = file.read() print(text) text = file.read() print("-" * 10) print(text) # 3. 关闭 file.close() #1111111 #---------- #
文件写入与缓冲区刷新
6、向文件中写入数据
Python文件对象提供了write()函数,可向文件中写入指定内容。该函数的语法格式如下:
file.write(string) 在写入文件完成后,务必调用close()函数关闭打开的文件,否则写入的内容不会保存到文件中。
这是因为,写入文件内容时,操作系统不会立即将数据写入磁盘,而是先缓存起来;只有调用close()函数时,操作系统才会确保将未写入的数据全部写入磁盘文件。
写入文件示例:
# 打开文件 f = open("README", "w")
f.write("hello python!\n") f.write("今天天气真好")
# 关闭文件 f.close()
若写入数据后不想立即关闭文件,可调用文件对象提供的flush()函数,将缓冲区数据写入文件。
f = open("a.txt", 'w') f.write("写入一行新数据") f.flush()
使用os模块进行文件目录管理
三、文件/目录的常用管理操作
在终端或文件浏览器中可执行常规的文件/目录管理操作,如创建、重命名、删除、改变路径、查看目录内容等。
在Python中,若希望通过程序实现上述功能,需导入os模块。
1、文件操作
| 方法名 | 说明 | 示例 |
|---|---|---|
| rename | 重命名文件 | os.rename(源文件名, 目标文件名) |
| remove | 删除文件 | os.remove(文件名) |
2、目录操作
| 方法名 | 说明 | 示例 |
|---|---|---|
| listdir | 目录列表 | os.listdir(目录名) |
| mkdir | 创建目录 | os.mkdir(目录名) |
| rmdir | 删除目录 | os.rmdir(目录名) |
| getcwd | 获取当前目录 | os.getcwd() |
| chdir | 修改工作目录 | os.chdir(目标目录) |
文件或者目录的操作都支持相对路径和绝对路径。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









