python文件操作

文件

文件分为文本文件二进制文件,我们可以这样记忆:除文本文件之外的都是二进制文件

文件操作

文件操作就是对文件进行打开,读写,关闭

open()

注:这种打开方式需要手动进行关闭文件

我们可以使用open()这个函数进行文件的打开
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

参数说明:

  • file: 必需文件路径相对或者绝对路径
  • mode: 可选参数,默认为'r'只读模式)。这个参数指定了文件的打开模式
  • buffering: 可选参数,默认为 -1。这个参数设置缓冲策略
    • -1:使用默认缓冲策略(对于文本文件行缓冲,对于二进制文件全缓冲
    • 0无缓冲数据直接写入文件或直接从文件读取,不使用内存缓冲
    • 1行缓冲(只在文本模式下有效)
    • 一个大于1整数:指定缓冲区大小(以字节单位
  • encoding: 一般使用utf8
  • errors: 报错级别
  • newline: 区分换行符
  • closefd: 传入的file参数类型
  • opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符
t = """
hello world
welcome to my world
"""
file = open('./text.txt',mode='w')
file.write(t)
file.close()

with open() as f:

  • 等价于 f = open()
  • 这是python中可以自动关闭文件内置函数,也是文件操作最为常用的

我们要打开demo1.txt文本文件

filename1 = './demo1.txt'
with open(filename1,encoding='utf-8') as f:  #mode的参数默认是r,读
    content = f.read()
    print(content)#会打印出demo1.txt中所有的内容

文件的打开模式

打开模式效果
r读方式打开,文件必须存在
w写方式打开文件不存在则创建存在清空原有内容
a追加模式打开,文件不存在则创建存在则继续进行写操作
r+读写模式打开,文件必须存在
w+读写模式打开文件,不存在则创建存在清空原有内容
a+追加并可读模式文件不存在则创建存在则继续进行写操作
rb二进制读模式打开 同r
wb二进制写模式打开 同w
ab二进制追加模式打开 同a
rb+二进制读写模式打开 同r+
wb+二进制读写模式打开 同w+
ab+二进制读写模式打开 同a+

文件对象fp文件交互常用方法

调用方法描述
fp.read()读取文件中的所有内容作为一个字符串返回
fp.read(n)读取文件中的n个字符作为一个字符串返回,并且会移动游标
fp.readline()读取文件中的一行内容作为一个字符串返回,并且会移动游标
fp.readlines()文件中的每行内容作为一个字符串存入列表中,并返回该列表
for i in fp遍历文件中的每一行
fp.write(str)可写文件当前位置str的内容写入
fp.writelines(seq对象)可写文件当前位置写入给定序列的每个字符串
print(data, file=fp)data变量中的内容重定向到文件中
with open("./text.txt",mode="a+") as fp:
    l1 = ["1123\n","open"]
    fp.writelines(l1)

read()

读取的时候,会有光标移动,即读取完一部分数据后,就会继续往下进行读取
eg:
我们要读出demo1.txt中的内容

filename1 = './demo1.txt'
with open(filename1,mode='rt', encoding='utf-8')as f: #t是文本文件模式,是默认的,可以不写
    content = f.read()   #会默认读取文件的全部内容
    print(content)   #会打印出demo1.txt中所有的内容

读取大文件方式

对于read(),如果我们要读取很大很大文件内容,那么就要设置每次读取字符大小,否则就会导致内存溢出。当我们设置了读取字符大小限制后,就可以使用while循环去接收整个文件内容。当全部读取完之后,再进行读取时,就会是(我们可以利用这个条件结束循环

filename1 = './demo1.txt'
with open(filename1,mode='rt', encoding='utf-8') as f:
    c = 3
    all_content = ""
    while 1:
        content = f.read(c)
        if not content:
            break
        all_content += content   #进行字符拼接
print(all_content) #会打印出demo1.txt中的所有内容

readline

读取一行

filename1 = './demo1.txt'
with open(filename1,mode='rt', encoding='utf-8') as f:
    content = f.readline()
    print(content)

readlines

一行一行进行读取一次性读取的内容存储到list列表

filename1 = './demo1.txt'
with open(filename1,mode='rt', encoding='utf-8') as f:
    content = f.readlines()
    print(content)  #会打印出一个列表,列表中的内容是文件内容

write()

write() 括号内部需要传递一个字符串有返回值,返回的是你写入的字符串的长度

mode参数:
w 可写,会覆盖文件,文件不存在会创建文件
a 追加,文件不存在会创建文件

filename1 = './demo2.txt'
with open(filename1,mode='wt', encoding='utf-8') as f:  #会进行覆盖
   f.write('你好,我叫华子')
filename1 = './demo2.txt'
with open(filename1,mode='at', encoding='utf-8') as f:    #会进行追加
   f.write('你好,我叫QQ糖\n')

二进制文件

所有的文本文件之外的都叫做二进制文件二进制文件读取时字节的形式进行读取
注:utf-8指向文本文件,所以二进制文件不能指定utf-8

t 文本文件模式默认
b 二进制文件模式
rb 读取二进制文件

fileName = r'C:\Users\EDY\Desktop\陈奕迅 - 不要说话.mp3'
with open(fileName,'rb')as f:  # 读取
    new_path = 'qq.mp3'
    with open(new_path,'wb')as new_f: # 写入新文件
        c = 1024*100  #以字节的形式读取
        while 1:
            content = f.read(c)
            if not content:
                break
            new_f.write(content)
fileName = r'C:\Users\EDY\Desktop\陈奕迅 - 不要说话.mp3'
with open(fileName,'rb')as f:  # 读取
    new_path = 'qq.mp3'
    with open(new_path,'ab')as new_f: # 追加,写入新文件
        c = 1024*100
        while 1:
            content = f.read(c)
            if not content:
                break
            new_f.write(content)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲸屿195

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值