python文件读写
正文:
- 文本模式
- 二进制模式
- with语句
文本模式
要读写文本文件,首先通过内置函数open 打开一个文件。open函数会返回一个对象,我们可以称之为文件对象。
这个返回的文件对象就包含读取文本内容和写入文本内容的方法。
open函数的参数如下:
open( file, # 指定要打开文件的路径 mode='r', # 文件打开的模式 buffering=-1, encoding=None, # 字符编解码方式 errors=None, newline=None, closefd=True, opener=None )
写文件示例
# 指定编码方式为 utf8,只写模式‘w’ f = open('tmp.txt','w',encoding='utf8') # write方法会将字符串编码为utf8字节串写入文件 f.write('哈喽,世界!') # 文件操作完毕后, 使用close 方法关闭该文件对象 f.close()
注意:mode参数为'w',表示要覆盖写文件。 如果原来文件中有内容, 该模式打开文件后,文件中所有的内容都会被删除掉!!!
若需要接着在原来的文件后面添加新的内容,可以用追加模式 a
打开文件。
读文件示例
# read函数有参数size,读取文本文件的时候,用来指定这次读取多少个字符。 如果不传入该参数,就是读取文件中所有的内容。
# 以只读模式打开 f = open('tmp.txt','r',encoding='utf-8')
content = f.read(3) # read方法读取3个字符
print(content)
content = f.read(3) # 接上次,继续读取3个字符
print(content) # read 方法会在读取文件中的原始字节串后,根据上面指定的utf-8解码为字符串对象返回 content = f.read() # 读取所有内容
print(content) # 文件关闭 f.close() # 通过字符串的split方法按‘:’进行分割,并取0下标的值 name = content.split(':')[0] print(name)
使用readlines方法,会返回一个列表。 列表中的每个元素依次对应文本文件中每行内容。
f = open('tmp.txt') linelist = f.readlines() # 列表的每个元素对应的字符串 最后有一个换行符 f.close() for line in linelist: print(line)
# 去掉换行符
f = open('tmp.txt') content = f.read() # 读取全部文件内容 f.close() # 将文件内容字符串 按换行符 切割 到列表中,每个元素依次对应一行 linelist = content.splitlines() for line in linelist: print(line)
二进制模式打开文件
# mode参数指定为rb 就是用二进制读的方式打开文件 f = open('tmp.txt','rb') content = f.read() f.close() # 由于是 二进制方式打开,所以得到的content是 字节串对象 bytes print(content) # 该对象的长度是字节串里面的字节个数,就是12,每3个字节对应一个汉字的utf8编码 print(len(content))
以二进制方式写数据到文件中,传给write方法的参数不能是字符串,只能是bytes对象,示例如下
# mode参数指定为 wb 就是用二进制写的方式打开文件 f = open('tmp.txt','wb') content = '测试二进制写入文件' # 二进制打开的文件, 写入的参数必须是bytes类型, # 字符串对象需要调用encode进行相应的编码为bytes类型 f.write(content.encode('utf8')) f.close()
利用字节方式(二进制方式)实现一个简单的文件拷贝功能
def fileCopy(srcPath,destPath): # srcPath源文件路径,destPath目标文件路径 srcF = open(srcPath,'rb') content = srcF.read() srcF.close() destF = open(destPath,'wb') destF.write(content) destF.close() fileCopy('测试1.png','测试2.png')
with语句
忘记使用close方法关闭文件可能会造成意想不到的问题。使用with 语句 打开文件,就不需要再调用close方法关闭文件。 Python解释器会帮我们调用文件对象的close方法。
# open返回的对象 赋值为 变量 f with open('tmp.txt') as f: linelist = f.readlines() # 注意有换行符 for line in linelist: print(line)
写入文件的缓冲机制
操作系统为了提高效率,通常并不会立即把内容写到存储文件中, 而是写入内存的一个缓冲区 。
等缓冲区的内容堆满之后,或者程序调用close 关闭文件对象的时候,再写入到文件中。
示例1
f = open('tmp.txt','w',encoding='utf8') f.write('测试写入缓冲的文字') # 等待 30秒,再close文件 import time time.sleep(30) # 在30秒内打开文件tmp.txt,无内容 f.close()
若需要在调用write之后,立即把内容写到文件里面,可以使用 文件对象的 flush方法
f = open('tmp.txt','w',encoding='utf8') f.write('测试write后立即写入内容到文件') # 立即把内容写到文件里面 f.flush() # 等待 30秒,再close文件 import time time.sleep(30) # 文件内容为:测试write后立即写入内容到文件
f.close()
参考学习:https://www.byhy.net/tut/py/basic/13/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」