python学习笔记_第20天(文件操作--IO 技术)

本文详细介绍了Python中如何进行文本文件和二进制文件的读写操作,包括read、readline、readlines等方法的使用,以及文件指针的控制。还展示了如何按行读取文件、添加行号以及文件拷贝的实现。同时,讲解了文件对象的常用属性如name、mode、closed,以及write、read、writelines等方法。通过对文件模式的理解和实践,能帮助读者熟练掌握文件操作技巧。
摘要由CSDN通过智能技术生成

文本文件的读取

文件的读取一般使用如下三个方法:

  1. read([size])
    从文件中读取size 个字符,并作为结果返回。如果没有size参数,则读取整个文件。读取到文件末尾,会返回空字符串。
  2. readline()
    读取一行内容作为结果返回。读取到文件末尾,会返回空字符串。
  3. readlines()
    文本文件中,每一行作为一个字符串存入列表中,返回该列表
# 读取一个文件前3个字符
with open(r'c.txt', 'r', encoding='gbk') as f:
    str = f.read(3)  # 读取文件的前三个字符,英文中文都以一个字符记
    str2 = f.read()  # 从第四个字符起,读取整个文件
    print(str)
    print(str2)
# 按行读取一个文件
with open(r"c.txt", "r") as f:
    while True:  # 循环语句结构,逐行读取文件
        fragment = f.readline()
        if not fragment:  # 读取到文件末尾,会返回空字符串。not 空字符串 = not false =ture
            break
        else:
            print(fragment, end="")

# 使用迭代器(每次返回一行)读取文本文件
with open(r"c.txt", "r") as f:
    for a in f:
        print(a, end="")
# 为文本文件每一行的末尾增加行号
a = ['python\n', 'java\n', 'html\n']  # 文件读取后的存放格式
b = enumerate(a)  # 对列表元素添加索引,并用元组打包
print(a)
print(b)  # <enumerate object at 0x000001E80CDB3C78>,可迭代对象
print(list(b))  # [(0, 'python\n'), (1, 'java\n'), (2, 'html\n')],在列表中以元组形式(index,line)存放(索引值,行内容)

# 用文件代替a变量
with open("c.txt", "r", encoding="gbk") as f:
    lines = f.readlines()  # 读取文件,将每一行作为一个字符串存入列表中
    lines = [line.rstrip() + " #" + str(index + 1) + "\n" for index, line in
             enumerate(lines)]  # 列表为可变类型变量,推导式生成新列表,str.rstrip()去除右边空白符

with open("c.txt", "w", encoding="gbk") as f:
    f.writelines(lines)  # w,覆盖原文件重写

二进制文件的读取和写入

二进制文件的处理流程和文本文件流程一致。首先要创建文件对象,不过需要指定二进制模式,从而创建出二进制文件对象。例如:

f = open(r"d:\a.txt", 'wb')   # 可写的、重写模式的二进制文件对象
f = open(r"d:\a.txt", 'ab')  # 可写的、追加模式的二进制文件对象
f = open(r"d:\a.txt", 'rb')  # 可读的二进制文件对象

创建好二进制文件对象后,仍然可以使用write()、read()实现文件的读写操作。

# 读取图片文件,实现文件的拷贝
with open(r'photo.jpg', 'rb') as f:
    with open(r'photo_copy.jpg', 'wb') as w:
        for line in f.readlines():
            w.write(line)
print('success copied')

文件对象的常用属性和方法

文件对象的常用属性

属性说明
name返回文件的名字
mode返回文件的打开模式
closed若文件被关闭则返回True

文件对象的打开模式

模式说明
r读模式
w写模式
a追加模式
b二进制模式(可与其他模式组合)
+读写模式(可以其他模式组合)

文件对象的常用方法

方法名说明
read([size])从文件中读取size 个(二进制)字节或(文本)字符的内容返回。若省略[size],则读取到文件末尾,即一次读取文件所有内容
readline()从文本文件中读取一行内容
readlines()把文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回
write(str)将字符串str 内容写入文件
writelines(s)字符串列表s 写入文件文件,不添加换行符
seek(offset [,whence])把文件指针移动到新的位置,offset 表示相对于初始位置whence 的多少个字节的偏移量;offset:为正往结束方向偏移,为负往开始方向偏移。whence :0: 从文件头为指针起始值(默认值);1:从当前位置为指针起始值;2:从文件尾为指针起始值
tell()返回文件指针的当前位置
truncate([size])不论指针在什么位置,只留下指针前size 个字节的内容,其余全部删除;如果没有传入size,则当指针当前位置到文件末尾内容全部删除
flush()把缓冲区的内容写入文件,但不关闭文件
close()把缓冲区内容写入文件,同时关闭文件,释放文件对象相关资源
# 控制指针读取文件内容
with open(r'c.txt', 'r', encoding='gbk') as f:
    print('文件名:{0}'.format(f.name))
    print(f.tell())  # 返回当前指针位置
    print('读取第一行内容:{0}'.format(f.readline()))
    print(f.tell())  # 返回读取一行文本后的指针位置
    f.seek(7)  # 默认指针起始位置为文件开头,偏移三个字符,gbk编码中文占两个字符,英文占一个字符
    print('读取偏移指针后到当前行尾的内容:{}'.format(f.readline()))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值