Python文件读写操作全解析:从基础到进阶技巧

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

本文系统梳理Python中文件操作的核心方法。涵盖以'r'、'w'、'a'模式进行读写与追加,详解read、readline及readlines的读取差异。深入讲解tell()与seek()的光标定位机制,以及flush()实时写入和truncate()截断功能。通过代码示例展示不同模式下的行为差异,帮助开发者掌握文件处理的最佳实践。

文件的读取操作

具体示例如下:

 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

执行后的输出结果:

代码片段如下:

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

文件的写入操作

关键知识点说明:

1. 在执行写入操作前,若使用特定模式,文件内容会被格式化并清空。

2. 清空操作发生在调用open函数并指定写入模式(如'w')之后立即执行。

print("写的操作,写文件的时候,不能调用读方法,读文件的时候,不能调用写方法")
 
f = open('python','w',encoding='utf8')
f.write("I must learn python \nbecause, python is important \n")
f.write("java is better?")
f.write("maybe") #上面的语句,没有加换行符,所以输出的内容是紧接的
f.close()

执行后的输出结果:

打开文件后,显示内容如下:

I must learn python 
because, python is important 
java is better?maybe

文件的追加(append)方法

语法格式如下:

f = open('文件名','a','encoding = utf8')

该模式为追加模式:1. 若文件为空,则从头开始写入内容;2. 若文件已有内容,则在文件末尾继续追加写入。

具体示例如下:

f = open('python','a',encoding='utf8')
f.write("花开又花落")
f.close()

执行后的输出结果:

I must learn python 
because, python is important 
java is better?maybe花开又花落
 

readline 和 readlines 方法的区别

readline 方法用于逐行读取文件内容。

readlines 方法用于一次性读取全文内容。

具体示例如下:

 print("readline方法")
 f = open('无题','r',encoding='utf8')
 a = f.readline()
 print("此时光标位置:",f.tell())
 b = f.readline()
 print("此时光标位置:",f.tell())
 print(a.strip()) #strip是字符串方法中去除空格和换行的方法
 print(b.strip())
 
 
 print("readlines方法,会将每行的内容组成一个列表打印")
 f = open('无题','r',encoding='utf8')
 c = f.readlines()
 print(c)
 print(id(c))
 print(id(f))
 for i in c:
  print(i.strip())
 print("遍历方法")
 f.seek(0)
 for i in f:
  print(i.strip())
 f.close() #文件的操作中,close()方法一定不能忘记

执行后的输出结果:

readline方法
此时光标位置: 23
此时光标位置: 46
昨夜星辰昨夜风
画楼西畔桂堂东
readlines方法,会将每行的内容组成一个列表打印
['昨夜星辰昨夜风\n', '画楼西畔桂堂东\n', '身无彩凤双飞翼\n', '心有灵犀一点通']
37826824
5344280
昨夜星辰昨夜风
画楼西畔桂堂东
身无彩凤双飞翼
心有灵犀一点通
遍历方法
昨夜星辰昨夜风
画楼西畔桂堂东
身无彩凤双飞翼
心有灵犀一点通

文件的 tell() 和 seek() 方法

具体示例如下:

f = open('无题','r',encoding='utf8')
f.read(4)
print('当前光标位置',f.tell())

f.seek(10)
print('当前光标位置',f.tell())
f.close()

#read时,一个中文算三个字符

执行后的输出结果:

当前光标位置 12 当前光标位置 10

文件操作中的 flush 方法

import sys,time

for i in range(20):
 sys.stdout.write("#")
 sys.stdout.flush()
 time.sleep(1)


truncate 截断方法

f = open('test','w')
f.write("hello")
f.write("\n")
f.write("python")
f.flush() #这样不用执行close方法,内存中的数据,就会写入到disk
f.close()

f = open('test','a')
f.truncate(2) #截断方法,光标从2开始往后截取
f.close()

其他文件操作方法:r+ 读写模式

基于字符的 read 与 write 操作

最基本的文件操作即在文件中读写数据,这相对容易掌握。现在打开一个文件以进行写操作:

fileHandle = open ( 'test.txt', 'w' )

参数 'w' 表示文件将被写入数据,语句的其他部分易于理解。下一步是将数据写入文件:

fileHandle.write ( 'This is a test.\nReally, it is.' )

该语句将 'This is a test.' 写入文件的第一行,'Really, it is.' 写入文件的第二行。最后,我们需要执行清理工作并关闭文件:

fileHandle.close()

正如所见,在Python的面向对象机制下,这确实非常简单。需要注意的是,当你再次使用 'w' 方式在文件中写数据时,所有原来的内容都会被删除。如果想保留原来的内容,可以使用 'a' 方式在文件结尾附加数据:

fileHandle = open ( 'test.txt', 'a' ) 
fileHandle.write ( '\n\nBottom line.' ) 
fileHandle.close()

然后,我们读取 test.txt 文件,并将内容显示出来:

fileHandle = open ( 'test.txt' ) 
print fileHandle.read() 
fileHandle.close()

以上语句将读取整个文件并显示其中的数据。

基于行的读写 line

fileHandle = open ( 'test.txt' ) 
print fileHandle.readline() # "This is a test." 
fileHandle.close() 

同时,也可以将文件内容保存到一个 list 中:

fileHandle = open ( 'test.txt' ) 
fileList = fileHandle.readlines() 
for fileLine in fileList: 
print '>>', fileLine 
fileHandle.close() 

或者在文件中一次读取几个字节的内容:

fileHandle = open ( 'test.txt' ) 
print fileHandle.read ( 1 ) # "T" 
fileHandle.seek ( 4 ) 
print FileHandle.read ( 1 ) # " "(原文有错)

本站声明

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

Python 相关产品和应用

全部下载

专题列表