Python文件篇(六)

文件的读取与写入

打开文件(open() 函数):

file = open("文件路径", "模式")
  • 常用模式包括:

    • “r”:读取模式,文件必须存在。
    • “w”:写入模式,会覆盖原文件或创建新文件。
    • “a”:追加模式,在文件末尾添加内容。
    • “b”:二进制模式,适用于处理非文本文件(如图片、音频等)。
    • “r+”:读写模式,文件必须存在。

读取文件内容:

file = open("example.txt", "r")
content = file.read()  # 读取整个文件内容
print(content)
file.close()
  • read():读取整个文件内容。
  • readline():按行读取文件内容,每次读取一行。
  • readlines():读取文件所有行,返回一个列表。

写入文件内容

file = open("example.txt", "w")
file.write("这是一个测试。\n")
file.writelines(["第一行\n", "第二行\n"])
file.close()
  • write():写入字符串到文件。
  • writelines():将一个字符串列表写入文件。

关闭文件(close() 方法):

file.close()

使用 with 语句: 使用 with 语句可以自动处理文件关闭,避免忘记关闭文件带来的资源泄露问题

with open("example.txt", "r") as file:
    content = file.read()
    print(content)

文件指针

文件指针是指向文件中当前位置的一个标记,它决定了从文件的哪个位置开始读写数据。文件指针的初始位置取决于文件打开的模式:

  • 如果以 “r”(读取)或 “r+”(读写)模式打开文件,文件指针最初位于文件的开头。
    如果以 “w”(写入)或 “a”(追加)模式打开文件,文件指针分别位于文件的开头或末尾

使用以下方法来控制文件指针的位置:

  • seek(offset, whence):移动文件指针。
  • offset:移动的字节数。
  • whence:移动的起点。常用的值有:
    • 0:文件开头(默认值)。
    • 1:当前位置。
    • 2:文件末尾。
file = open("example.txt", "r")
file.seek(5)  # 将文件指针移动到第5个字节处
content = file.read()  # 从第5个字节开始读取内容
print(content)
file.close()

tell():返回当前文件指针的位置

file = open("example.txt", "r")
position = file.tell()  # 获取当前文件指针位置
print(f"当前文件指针位置: {position}")
file.close()

异常处理

在Python中,异常处理是一种用于捕获和处理运行时错误的机制。当程序执行过程中遇到错误时,Python会引发一个异常,如果没有处理这个异常,程序就会终止运行。为了防止程序崩溃并提供更好的用户体验,可以使用异常处理机制

try, except, else, finally

常处理使用 try-except 结构。基本语法如下

try:
    # 尝试执行的代码
    可能会引发异常的代码
except 异常类型 as 异常变量:
    # 发生异常时执行的代码
    处理异常的代码
finally:
    # 无论是否发生异常,都会执行的代码
    清理资源的代码
  1. try 块
    try 块中的代码是你认为可能会引发异常的部分。Python会尝试执行这些代码,如果没有异常,程序会正常继续执行。如果发生异常,程序会跳到对应的 except 块。

  2. except 块
    except 块用于捕获和处理异常。你可以指定要捕获的异常类型,并在 except 块中定义如何处理这些异常。你可以捕获特定类型的异常,也可以捕获所有异常。

捕获特定异常:

try:
    x = 1 / 0
except ZeroDivisionError as e:
    print(f"捕获到异常: {e}")

捕获所有异常:

try:
    x = 1 / 0
except Exception as e:
    print(f"捕获到异常: {e}")
  1. else 块(可选)
    else 块在 try 块中没有发生异常时执行。它通常用于执行那些只有在成功完成 try 块中代码时才应该执行的操作。
try:
    x = 10 / 2
except ZeroDivisionError:
    print("发生除零错误")
else:
    print("成功执行,没有异常")
  1. finally 块(可选)
    finally 块中的代码无论是否发生异常,都会执行。它通常用于清理资源,比如关闭文件或网络连接。
try:
    file = open("example.txt", "r")
    content = file.read()
except FileNotFoundError:
    print("文件未找到")
finally:
    file.close()
    print("文件已关闭")

自定义异常
可以通过继承内置的 Exception 类来创建自己的异常类。自定义异常通常用于在特定情况下引发特定的错误,以便更灵活地处理异常情况。

class MyCustomError(Exception):
    def __init__(self, message):
        self.message = message

try:
    raise MyCustomError("这是一个自定义异常")
except MyCustomError as e:
    print(f"捕获到自定义异常: {e.message}"

案例实操

编写一个程序,读取用户指定的文件内容并计算其中的单词数量。如果文件不存在或出现其他错误

def count_words_in_file(filename):
    try:
        # 尝试打开文件
        with open(filename, 'r') as file:
            content = file.read()
        
        # 计算单词数量
        words = content.split()
        word_count = len(words)
        print(f"文件 '{filename}' 中有 {word_count} 个单词。")
    
    except FileNotFoundError:
        # 捕获文件未找到的异常
        print(f"错误:文件 '{filename}' 未找到。请检查文件名和路径是否正确。")
    
    except PermissionError:
        # 捕获文件权限不足的异常
        print(f"错误:没有权限读取文件 '{filename}'。")
    
    except Exception as e:
        # 捕获其他异常
        print(f"发生错误:{e}")
    
    finally:
        # finally 块会在程序结束时执行
        print("文件处理结束。")

# 示例:用户输入文件名进行操作
filename = input("请输入要读取的文件名:")
count_words_in_file(filename)

运行结果

情况1:文件存在且读取成功

请输入要读取的文件名:example.txt
文件 'example.txt' 中有 50 个单词。
文件处理结束。

情况2:文件不存在

请输入要读取的文件名:nonexistent.txt
错误:文件 'nonexistent.txt' 未找到。请检查文件名和路径是否正确。
文件处理结束。

情况3:文件权限不足

请输入要读取的文件名:restricted.txt
错误:没有权限读取文件 'restricted.txt'。
文件处理结束。

情况4:发生其他未知错误
如果发生了其他未预料到的错误,比如编码问题,程序会捕获通用的 Exception 异常并显示错误信息

请输入要读取的文件名:corrupted.txt
发生错误:'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte
文件处理结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

huhy~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值