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/

posted @   天才九少  阅读(46)  评论(0编辑  收藏  举报
编辑推荐:
· 从 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 热点速览」
点击右上角即可分享
微信分享提示