(转)一篇搞懂python文件读写操作(r/r+/rb/w/w+/wb/a/a+/ab)

本文详细介绍了Python中文件操作的各种模式,包括只读、读写、二进制读取、追加写等,并通过多个示例演示了不同模式下的文件读写操作,如'r+'覆盖写入、'wb'二进制写入、'a'追加写入等。同时,文章还提到了文件指针的使用方法和文件操作中的常见注意事项。
摘要由CSDN通过智能技术生成

一、核心功能

‘r’:只读。该文件必须已存在。

‘r+’:可读可写。该文件必须已存在,写为覆盖写(不清空,覆盖与输入等长的部分内容)。

‘rb’:表示以二进制方式读取文件。该文件必须已存在。

‘w’:只写。打开即默认创建一个新文件,如果文件已存在,则覆盖写(即文件内原始数据会被新写入的数据清空后覆盖)。

‘w+’:写读。打开创建新文件并写入数据,如果文件已存在,则覆盖写。

‘wb’:表示以二进制写方式打开,只能写文件, 如果文件不存在,创建该文件;如果文件已存在,则覆盖写。

‘wb+’:表示以二进制写方式打开,读写文件, 如果文件不存在,创建该文件;如果文件已存在,则覆盖写。

‘a’:追加写。若打开的是已有文件则直接对已有文件操作,若打开文件不存在则创建新文件,只能执行写(追加在后面),不能读。

‘a+’:追加读写。打开文件方式与写入方式和’a'一样,但是可以读。需注意的是你若刚用‘a+’打开一个文件,一般不能直接读取,因为此时光标已经是文件末尾,除非你把光标移动到初始位置或任意非末尾的位置。(可使用seek() 方法解决这个问题,详细请见下文Model 8 示例)

二、示例解说

Model 1: r —只读模式

注意test2.txt 必须文件是已存在的。顺便说一下字符编码。因为Windows操作系统默认字符编码为GBK,而Python默认Unicode.utf-8,如果报错就加上" encoding='utf-8' ",也存在不加写不进内容的情况。

def func3():
    f =open("./text2.txt","r+",encoding='utf-8')
    try:
        print(f.readline())   #打印文件内容首行数据
    except:
        pass
    finally:
        f.close()

Model 2: r+ —可读可写模式

def func3():
    f =open("./text2.txt","r+",encoding='utf-8')
    try:
        f.write("today is 15.6.2021") #覆盖原文件同长度字节
        f.seek(0)  #将光标回到文件头(如要从头到尾读文件内容,文件指针需回到文件头)
        print(f.read()) #读取打印文件全部内容
    except:
        pass
    finally:
        f.close()

Model 3: rb —以二进制方式读取文件

注意:不能加encoding='utf-8',会报错ValueError: binary mode doesn't take an encoding argument

def func3():
    f =open("./text2.txt","rb")  
    try:
        print(f.read())
    except:
        pass
    finally:
        f.close()

>>>b'hello,world!'   #二进制方式返回

Model 4: w —只写模式

def func3():
    f =open("./text2.txt","w",encoding='utf-8')
    try:
        f.write("today is 15.6.2021")
    except:
        pass
    finally:
        f.close()

Model 5: w+ —写读模式

def func3():
    f =open("./text2.txt","w+",encoding='utf-8')
    try:
        f.write("today is 15.6.2021")
        f.seek(0)
        print(f.read())
    except:
        pass
    finally:
        f.close()

>>>today is 15.6.2021   #原文件内容清空,写入,读取

Model 6: wb —以二进制方式写文件

注意
1.不能加encoding='utf-8',会报错ValueError: binary mode doesn't take an encoding argument
2.f.write得加.encode('ascii'),否则无法写入内容

def func3():
    f =open("./text2.txt","wb")
    try:
        f.write("hello,world!!!".encode('ascii'))
    except:
        pass
    finally:
        f.close()

Model 7: a —追加写模式

def func3():
    f =open("./text2.txt","a",encoding='utf-8')
    try:
        f.write("\ntoday is 15.6.2021")
    except:
        pass
    finally:
        f.close()

Model 8: a+ —追加读写模式

def func3():
    f =open("./text2.txt","a+",encoding='utf-8')
    try:
        f.write("today is 15.6.2021\n")
        f.seek(0)
        print(f.read())
    except:
        pass
    finally:
        f.close()
 >>>
today is 15.6.2021
today is 15.6.2021       

三、附加干货

以下是文件操作中常用的一些方法:

print(f.readline()) # 打印一行
print(f.readline(5)) # 打印前5个字符
print(f.tell()) # 打印当前指针位置
print(f.read()) # 读完文件后,指针在最尾处
f.seek(0) # 如要重头到尾再读,文件指针须先回到文件头(0-文件头,默认值; 1-当前位置; 2-文件尾)
print(f.read()) # 重读文件
print(f.encoding) # 打印当前使用的字符编码
print(f.name) # 打印文件名
print(f.flush()) # 刷新
f.truncate() # 清空文件
f.truncate(12) # 从头开始,第12个字符后截断并清除
f.close() # 关闭文件

  • End -

转载出处并更正了一些内容:https://www.cnblogs.com/wujiaqing/p/10690265.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值