第八章 Python文件操作 03-读写文件

本文详细介绍了Python中使用open()函数进行文件读写的各种模式,包括只读、读写、追加等。通过示例展示了如何读取文件的每一行、一次性读取所有内容以及分批读取大文件。同时,提到了以字节模式处理文件及写入操作。最后,给出了文件拷贝的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

读写文件

使用**open()**方法打开一个文件,建立一个程序与文件的数据流。在打开文件的时候需要设置打开的模式,常见的打开模式如下:

打开模式描述文件指针异常
r只读模式打开,默认开头如果文件不存在,会出现异常
r+读写模式打开开头如果文件不存在,会出现异常
w只写模式打开,打开文件会清空原有内容开头/结尾
w+读写模式打开,打开文件会清空原有内容开头/结尾
a只写模式打开结尾
a+读写模式打开结尾
b二进制数据流,可以与上述的混合使用

1. 读取文件的基本操作

from collections.abc import Iterator, Iterable

# 读取文件中的内容

# 打开指定的文件,设置打开模式为r,表示读取;设置encoding字符集,使用utf8字符集打开文件;获取到一个数据流
read_stream = open("./1. OS模块.py", "r", encoding="utf8")

# 打开文件后,建立数据通道,每一行数据就已经存在于一个迭代器容器中。
print(isinstance(read_stream, Iterator))
print(isinstance(read_stream, Iterable))

# 遍历,获取到文件中的每一行数据
# for line_data in read_stream:
#     print(line_data, end="")

# 还可以将文件中的数据当作一个字符串全部读取
# file_data = read_stream.read()
# print(file_data)

# 读取指定数量的字符
# data = read_stream.read(30)
# print(data)

# 读取一行数据
print(read_stream.readline(), end="")
print(read_stream.readline(), end="")
print(read_stream.readline(), end="")
print(read_stream.readline(), end="")

# 读取指定行的数据
# 参数传递的是一个字符的数量,返回的是这些字符所在的行数据!
print(read_stream.readlines(34), end="")

read_stream.close()

2. 循环读取文件

'''
内存是2G
文件内容是4G

内容是迭代器  读出来之后迭代器中就没有了
分批读取 肯定是将读的操作进行重复  重复到什么情况下不用再重复了 [read的内容是空字符串]

分批读取 怎么分批 一般是按照计算单位的换算来走的  通常是1024的倍数
'''
read_stream = open('./os的操作_08.py', 'r', encoding='utf-8')
while True:
	data = read_stream.read(1024)
	print(data)
	if data == '':
		break

3. 以字节模式读取

read_stream = open('./os的操作_08.py', 'rb')
# for ele in read_stream:
# 	print(ele)

# data = read_stream.read(18)  # 字节数
# print(data)
# print(data.decode('utf-8'))
print(read_stream.readlines())
read_stream.close()

# import os
# os.remove('./os的操作_08.py')

4. 写模式的基本操作

# 和文件之间建立通道
# w: 写模式
# a: 向后追加,如果没有设置追加模式,则默认会用新的内容覆盖掉之前的内容
write_stream = open("./相思.txt", "w", encoding="utf8")

# 写操作,一次写
write_stream.write("红豆生南国,春来发几支?\n")
# 同时写多个
write_stream.writelines(["愿君多采撷, ", "此物最相思\n"])

write_stream.close()

5. 以字节模式写入

# 和文件之间建立通道
# w: 写模式
# a: 向后追加,如果没有设置追加模式,则默认会用新的内容覆盖掉之前的内容
# b: binary,字节模式
write_stream = open("./相思.txt", "wb")

# 写操作,一次写
write_stream.write("红豆生南国,春来发几支?\n".encode("utf8"))
# 同时写多个
write_stream.writelines(map(lambda ele: ele.encode("utf8"), ["愿君多采撷, ", "此物最相思\n"]))

write_stream.close()

拷贝文件

# 其实拷贝文件的思路非常简单,就是读取源文件,将读取到的内容原封不动的写入到目标文件即可
def copy_file(src_file, dst_file):
    """
    拷贝文件
    :param src_file: 源文件
    :param dst_file: 目标文件
    :return:
    """
    # 1. 以字节模式打开源文件,创建数据流
    read_stream = open(src_file, "rb")
    # 2. 以字节模式打开目标文件,创建数据流
    write_stream = open(dst_file, "wb")
    # 3. 循环读取源文件的内容,往目标文件写
    while len(read_data := read_stream.read(1024)) != 0:
        write_stream.write(read_data)
        write_stream.flush()


copy_file("./1. OS模块.py", "./1. OS模块.py.copy")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值