Python文件读写操作全解析:模式、属性与修改技巧

追风的人
追风的人
发布时间:2026-10-13 | 2人浏览过
原创

本文详细总结Python中文件操作的核心方法,涵盖open函数的多种读写模式(r, w, a, rb等)及文件句柄属性(tell, seek, encoding等)。通过代码示例演示如何读取、写入、追加内容,并深入讲解二进制处理与文件内容修改的两种实用策略,帮助开发者掌握高效且安全的文件处理技巧。

Python文件操作基础流程

文件操作的基本流程通常包含三个步骤:首先打开文件以获取文件句柄,随后利用该句柄执行具体的读写操作,最后关闭文件以释放资源。在Python中,可以通过open函数直接打开文件并赋值给变量,例如指定文件名为test_file且编码为utf-8,此时变量file1将包含文件的全部文本内容。


#文件操作流程:1、打开文件,得到一个文件句柄;通过文件句柄操作文件;关闭文件。
#将文件打开文件赋给file1,test_file为文件名,utf-8为文件编码;file1是文件的全量内容
data1 = open("test_file",encoding="utf-8").read()
print(data1)
#打开文件,获取文件句柄file2,后续通过file2这个文件句柄对文件进行各种操作方法,默认文件以只读模式打开,只读时不能对文件进行写操作
file2 = open("test_file","r",encoding="utf-8")
#一次将文件内容全部读取
date2 = file2.read()
#"w"是以写模式打开文件,此模式会先清空文件内容,此时不能对文件进行读操作
file3 = open("test_file3","w",encoding="utf-8")
file3.write("file3 文件写\n")
#"a"是文件追加写模式,此时从文件末尾追加往后面写
file4 = open("test_file","a",encoding="utf-8")
file4.write("file4 文件追加写")
#逐行读文件,readline()或直接对文件句柄进行迭代
file5 = open("test_file","r",encoding="utf-8")
for i in range(5):
  print(file5.readline())
#下面将文件句柄直接进行迭代,文件句柄也是迭代器
for line in file5:
  print(line)

文件读写模式详解

为了更精细地控制文件操作,建议使用open函数显式指定模式。默认情况下,文件以只读模式('r')打开,此时无法执行写入操作。可以通过file2句柄调用read()方法一次性读取全部文件内容。若需写入数据,可使用'w'模式打开文件(如file3),该模式会先清空文件原有内容,随后执行write()写入指定字符串。此外,'a'模式用于追加写入(如file4),数据会被添加到文件末尾而不影响原有内容。


#返回当前文件操作的位置信息,返回的是字符的数量
print(file5.tell())
#手工移动文件操作的当前位置,位置信息为seek的实参
file5.seek(10)
#输出文件当前编码,即打开时使用的编码
print(file5.encoding)
#输出文件名称
print(file5.name)
#判断文件是否可读,返回布尔类型,与文件打开时指定的打开模式相关
print(file5.readable())
#判断文件是否可写,返回布尔类型,与文件打开时指定的打开模式相关
print(file5.writable())
#将文件写的内容强制刷到硬盘
file5.flush()
#判断文件是否关闭,返回布尔类型
print(file5.closed)
#默认清空文件内容,传递实参的话就是从文件开头截断多少字符,总是从文件开头开始截断,不论当前文件读写所处的位置
#file5.truncate()
#文件读写模式“r+”,读是从文件开头读,写是从文件末尾往后写,操作文件位置指针是读的位置,只能继续往文件后面追加写
#文件写读模式“w+”,先创建新文件然后写,写了以后可以读。操作文件位置指针是读的位置,只能继续往文件后面追加写
#以二进制读取文件“rb”,打开文件时没有encoding这个参数
file6 = open("binary_file","wb")
#二进制模式打开文件向写入时需要将字符串转换为二进制,否则写报错
file6.write("binary file".encode(encoding="utf-8"))
#文件的修改
#方法1将文件一次全部读取在使用replace,将这个文件修改后的值返回,不修改原文件
data4 = open("test_file4",encoding="utf-8").read()
print(data4.replace("789","7788991010",2))
print(data4)
#方法2逐行读取做判断,写入到一个新文件
file7 = open("test_file4","r",encoding="utf-8")
file8 = open("test_file4_new","w",encoding="utf-8")
for line in file7:
  if "789" in line:
    line = line.replace("789","7788991010")
  file8.write(line)
file7.close()
file8.close()

文件句柄属性与常用方法

除了全量读取,Python还支持逐行读取文件。可以使用readline()方法逐行获取内容,或者利用文件句柄本身的迭代器特性进行遍历。例如,通过range(5)限制读取前五行,或直接对文件句柄file5进行for循环迭代,这种方式在处理大文件时更为高效且节省内存。


print("->文件句柄的获取,读操作:")
 
f = open('无题','r',encoding='utf8')
d = f.read()
f.close()
print(d)
 
print('->例二:')
f = open('无题','r',encoding='utf8')
e = f.read(9)
f.close()
print(e)
#python3中,文件中一个中英文都占位1

二进制处理与文件修改技巧

在文件操作过程中,掌握文件句柄的常用属性与方法至关重要。tell()方法返回当前文件操作的字符位置;seek()方法允许手动移动文件指针到指定位置。通过encoding属性可获取打开时设定的编码格式,name属性返回文件名。readable()和writable()方法分别判断文件是否具备读或写权限,结果取决于打开模式。flush()方法用于强制将缓冲区内容写入硬盘。closed属性指示文件是否已关闭。truncate()方法默认清空文件,若传入参数则从文件开头截断指定字符数,无论当前读写指针位于何处。

对于复合读写模式,'r+'表示从文件开头读取,写入操作从文件末尾追加,指针位置由读取决定;'w+'模式先创建新文件并写入,之后可读取,但写入指针始终位于末尾。处理二进制文件时,需使用'rb'或'wb'模式,此时无需指定encoding参数。在二进制写入模式下,字符串必须先通过encode()转换为字节序列,否则将引发错误。


->文件句柄的获取,读操作:
昨夜星辰昨夜风
画楼西畔桂堂东
身无彩凤双飞翼
心有灵犀一点通
->例二:
昨夜星辰昨夜风
画

修改文件内容主要有两种策略。第一种是读取全部内容后使用replace()方法进行替换,并返回新字符串,但此方法不直接修改原文件。第二种是逐行读取源文件,根据条件判断是否需要替换内容,然后将处理后的行写入一个新文件(如test_file4_new),最后关闭源文件和目标文件。这种方法适用于大文件,避免一次性加载全部内容导致内存溢出。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表