python-22-一篇文章帮助你彻底掌握python文件操作,点点关注、收藏!大家一起日拱一卒!

python-22-一篇文章帮助你彻底掌握python文件操作

一.简介

终于来到python基础系列中的python文件操作,这一概念我准备先介绍一些基础,后续系列文章我将会用python来实现一个音乐播放器,实现读取我们自己电脑里面的音乐文件!打造专属于我们自己的音乐播放器!好!回到现实,活在当下!来开始我们今天的日拱一卒!

二.文件读取的基本步骤

  1. 打开文件:使用 open() 函数打开文件。它返回一个文件对象,通过这个文件对象可以进行后续的操作。

  2. 读取文件内容:通过文件对象的相关方法读取文件内容。

  3. 关闭文件:文件操作完成后,应当关闭文件以释放系统资源。

  4. open内建函数:open(file [, mode=‘r’, encoding=None, errors=None])

    file:文件路径,可以是相对路径和绝对路径

    mode:文件打开模式

    encodeing: 文件编码方式,不用于二进制文件,一般是utf-8,gbk

    errors:指定如何处理编码和解码错误 ,适用于文本文件

    返回值:一个可迭代的文件对象

三.文件读取的常见模式

  1. 'r':只读模式(默认)。如果文件不存在,则抛出异常。

  2. 'w':写入模式。会覆盖文件原有内容,文件不存在则会创建新文件。

  3. 'a':追加模式。向文件末尾添加内容,文件不存在则会创建新文件。

  4. 'rb''wb':二进制模式(如读取图片、音频等非文本文件)。

四.常用读取方式

  1. read(size):读取指定大小的内容,如果没有指定大小,则读取整个文件。

  2. readline():读取文件的一行。

  3. readlines():读取文件的所有行,返回一个列表。

示例:

  1. 读取文件全部内容
#打开文件
fp = open('.\example.txt','r',encoding='utf-8')
#读取文件全部内容
content = fp.read()
print(content)
fp.close()
'''
输出:
每天进步一点点!
逐日月不拘于人海万千!~~~
'''
  1. 读取文件指定字符数
#打开文件
fp = open('.\example.txt','r',encoding='utf-8')
#读取文件指定字符数
content = fp.read(5)
print(content)
fp.close()
'''
输出:
每天进步一
'''
  1. 读取一行
#打开文件
fp = open('.\example.txt','r',encoding='utf-8')
#读取一行
content = fp.readline()
print(content)
fp.close()
'''
输出:
每天进步一点点!
'''
  1. 读取一行指定字符数
#打开文件
fp = open('.\example.txt','r',encoding='utf-8')
#读取一行指定字符数
content = fp.readline(5)
print(content)
fp.close()
'''
输出:
每天进步一
'''
  1. 读取所有行 返回为列表
#打开文件
fp = open('.\example.txt','r',encoding='utf-8')
#读取所有行 返回为列表
content = fp.readlines()
print(content)
fp.close()
'''
输出:
['每天进步一点点!\n', '逐日月不拘于人海万千!~~~']
'''
  1. 使用with 语句,它是一个上下文管理器,可以自动处理文件打开和关闭的问题,确保即使发生异常也能正确关闭文件,所以我们可以简写读取文件代码;
with open('.\example.txt', 'r',encoding='utf-8') as file:
    lines = file.readlines()  # 读取所有行,返回一个列表
    print(lines)

'''
输出:
['每天进步一点点!\n', '逐日月不拘于人海万千!~~~']
'''
  1. 异常处理
try:
    with open('non_existent_file.txt', 'r') as file:
        content = file.read()
except FileNotFoundError:
    print("文件不存在!")
    
'''
输出:
文件不存在!
'''

上面介绍了读取文件的常用方法,那么读取大文件又该怎么处理?如果读取的文件大于内存呢?over!完蛋。。

针对大文件的读取,还是切片!!把大文件分割成若干小文件处理,处理完每个小文件释放这部分内存即可!

示例

  1. 按行读取 (readline()for 循环)
# 打开一个超大文件
with open('large_file.txt', 'r') as file:
    for line in file:  # 每次读取一行
        # 处理每一行的数据
        print(line.strip())  # strip() 去除末尾的换行符
  1. 按块读取 (read(size)readinto())
# 每次读取1000字节
with open('large_file.txt', 'r') as file:
    while True:
        chunk = file.read(1000)  # 每次读取1000个字符
        if not chunk:
            break  # 如果读取完毕,退出循环
        # 处理读取到的数据
        print(chunk)
  1. 使用 mmap 模块进行内存映射
import mmap

with open('large_file.txt', 'r') as file:
    # 使用 mmap 对文件进行内存映射
    mmapped_file = mmap.mmap(file.fileno(), 0, access=mmap.ACCESS_READ)
    
    # 按块读取文件内容
    for i in range(0, len(mmapped_file), 1000):
        chunk = mmapped_file[i:i+1000]
        # 处理 chunk 内容
        print(chunk.decode('utf-8'))
    
    mmapped_file.close()

  1. 使用生成器 (yield)
# 使用生成器逐行读取超大文件
def read_large_file(file_name):
    with open(file_name, 'r') as file:
        for line in file:
            yield line.strip()

# 使用生成器处理文件
for line in read_large_file('large_file.txt'):
    print(line)

五.写文件的基本步骤:

  1. 打开文件:使用 open() 函数,以适当的模式(如 'w''a' 等)打开文件。如果文件不存在,Python 会根据模式自动创建文件。

  2. 写入数据:通过文件对象的方法将数据写入文件。

  3. 关闭文件:操作完成后,关闭文件以确保数据被写入并释放资源。

六.常见的写入模式:

  1. 'w':写入模式。如果文件存在,它会被覆盖;如果文件不存在,则会创建一个新的文件。

  2. 'a':追加模式。如果文件存在,数据会被写入文件的末尾;如果文件不存在,则会创建一个新的文件。

  3. 'x':独占创建模式。如果文件已存在,会引发异常;如果文件不存在,Python 会创建一个新的文件并打开它。

  4. 'wb''ab':二进制写入模式,通常用于写入非文本数据(如图片、音频文件等)。

七.文件写入的方法

  1. write(string):将字符串写入文件。写入内容时不会自动换行。

  2. writelines(list):将字符串列表写入文件,每个元素都会被按顺序写入。

示例:

  1. 使用 'w' 模式写入文件(覆盖写入)
# 打开文件进行写入(会覆盖文件原有内容)
with open('example.txt', 'w') as file:
    file.write("Hello, Python!\n")
    file.write("This is a file writing example.\n")

注意:当存在’example.txt’则覆盖里面内容

​ 当不存在则新建’example.txt’文件并写入内容

  1. 使用 'a' 模式写入文件(追加写入)
# 打开文件进行追加写入(不会覆盖原有内容)
with open('example.txt', 'a') as file:
    file.write("Appending new line to the file.\n")

注意:当存在’example.txt’则追加里面内容

​ 当不存在则新建’example.txt’文件并写入内容

  1. 使用 'x' 模式写入文件(如果文件存在则引发异常)
try:
    # 尝试使用 'x' 模式写入文件,如果文件已经存在则抛出异常
    with open('example.txt', 'x') as file:
        file.write("This will only write if the file doesn't exist.\n")
except FileExistsError:
    print("文件已经存在,无法创建文件!")
  1. 使用 writelines() 写入多行数据,按照列表顺序写入
lines = [
    "First line of text.\n",
    "Second line of text.\n",
    "Third line of text.\n"
]

# 使用 writelines() 写入多行数据
with open('example.txt', 'w') as file:
    file.writelines(lines)
  1. 使用二进制模式写入文件(例如写入图片)
# 以二进制写入图片文件
with open('image.jpg', 'rb') as file:
    data = file.read()  # 读取二进制数据

# 假设我们修改了图像的内容并希望保存
with open('new_image.jpg', 'wb') as file:
    file.write(data)  # 将修改后的二进制数据写入新文件

八.文件打开模式 model

模式描述适用场景
'r'只读模式仅需读取文件,不会修改
'rb'只读二进制模式读取二进制文件,如图片、音频等
'r+'读写模式需要同时读取和修改文件
'rb+'读写二进制模式同时读取和修改二进制文件
'w'写入模式需要写入并覆盖文件内容
'wb'二进制写入模式写入二进制文件
'w+'读写模式(覆盖)同时读取和写入文件,且覆盖文件
'wb+'二进制读写模式(覆盖)同时读取和写入二进制文件,且覆盖
'a'追加模式追加数据到文件末尾
'ab'追加二进制模式追加二进制数据到文件末尾
'a+'读写追加模式同时读取和写入文件,并追加数据
'ab+'读写追加二进制模式同时读取和写入二进制数据,并追加数据
'x'独占创建模式确保文件不存在时创建新文件
'xb'独占创建二进制模式确保文件不存在时创建新二进制文件

九.文件指针

1.获取当前文件指针位置**tell()** — 获取当前文件指针的位置

with open('example.txt', 'r') as file:
    content = file.read(10)  # 读取前10个字符
    print(file.tell())  # 输出文件指针当前的位置

2.移动文件指针位置

seek() 方法用于移动文件指针到指定的位置。该方法可以接收两个参数:

  • offset:要移动的字节数,正值表示向前移动,负值表示向后移动。

  • whence:指定移动的起始位置,默认值为 0,表示从文件的开头开始移动。常用的选项有:

    • os.SEEK_SET(默认值):从文件的开头开始计算偏移。
    • os.SEEK_CUR:从当前位置开始计算偏移。
    • os.SEEK_END:从文件的结尾开始计算偏移。
with open('example.txt', 'r') as file:
    file.read(5)  # 读取前5个字符
    print(file.tell())  # 当前指针位置
    file.seek(0)  # 将指针移动到文件开头
    print(file.tell())  # 输出:0
    file.seek(3, os.SEEK_SET)  # 从文件开头向后移动3个字节
    print(file.tell())  # 输出:3
    file.seek(-5, os.SEEK_END)  # 从文件末尾向前移动5个字节
    print(file.tell())  # 输出:文件的总长度 - 5

十.编码(Encoding)和解码(Decoding)

什么是编码和解码?

  • 编码(Encoding) 是将字符串(文本)转换为字节(bytes)的过程。它是一个从字符到字节的转换过程,用于确保文本数据可以通过计算机存储、传输等方式进行处理。
  • 解码(Decoding) 是将字节(bytes)转换回字符串(文本)的过程。它是一个从字节到字符的转换过程,用于恢复原始文本。

1.字符串编码str.encode(encoding) encoding为编码格式utf-8, utf-16, ascii

# 将字符串编码为字节
text = "Hello, World!"
encoded_text = text.encode('utf-8')
print(encoded_text)  # 输出: b'Hello, World!'

2.字节解码bytes.decode(encoding) encoding为编码格式utf-8, utf-16, ascii 等 如果编码格式不匹配,会抛出 UnicodeDecodeError

# 将字节解码为字符串
encoded_text = b'Hello, World!'  # 字节数据
decoded_text = encoded_text.decode('utf-8')
print(decoded_text)  # 输出: 'Hello, World!'

九.总结

Python基础系列的文件读写,就介绍到这里,这应该是文件读写最为详细的一遍文章了!应该能帮助大家轻松掌握文件的读写!休息了,睡觉~~~

创作整理不易,请大家多多关注 多多点赞,有写的不对的地方欢迎大家补充,我来整理,再次感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SEEONTIME

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

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

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

打赏作者

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

抵扣说明:

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

余额充值