Python 文件读写、异常处理与模块使用详解

Python 文件读写、异常处理与模块使用详解

文件读写

文件打开

通过前面的学习,我们掌握了Python编程的基础,但还有许多重要内容未涉及,如外部文件的读写、程序异常处理和模块的使用。本文将详细介绍这些内容,帮助读者更全面地掌握Python编程。

文件的读写是编程中的重要环节。大多数情况下,数据通过外部文件导入,处理后导出。因此,了解如何与文件交互至关重要。文件操作的第一步是打开文件,通用格式为 with open,括号内需提供文件路径、打开模式和字符编码。

  • 文件路径:文件路径是文件的地址信息,提供完整路径或相对路径均可。
  • 打开模式:模式决定了文件的读写方式,如只读(r)、写入(w)、追加(a)等。
  • 字符编码:指定文件的字符编码,如UTF-8或GBK。

示例:
with open(‘example.txt’, ‘r’, encoding=‘utf-8’) as f:
# 执行读写操作

文件读取

文件打开后,可以使用多种方法读取内容:

  • read():读取整个文件内容。
  • readline():逐行读取文件。
  • readlines():将所有行读入列表。

示例:
with open(‘example.txt’, ‘r’, encoding=‘utf-8’) as f:
content = f.read()
print(content)

文件写入

写入文件有多种模式:

  • 覆盖写(w):创建新文件或覆盖现有文件。
  • 追加写(a):在文件末尾追加内容。
  • 二进制写(wb):适用于二进制文件,如图片。

示例:
with open(‘output.txt’, ‘w’, encoding=‘utf-8’) as f:
f.write(‘Hello, World!\n’)

既读又写

某些情况下,需要同时读取和写入文件,使用r+, w+, a+模式。

示例:
with open(‘example.txt’, ‘r+’, encoding=‘utf-8’) as f:
f.seek(0, 2) # 移动指针到文件末尾
f.write(‘Additional content\n’)

异常处理

常见异常

程序执行过程中可能出现异常,导致程序中断。常见的异常包括:

  • 除零错误:除以零。
  • 文件找不到错误:文件路径无效。
  • 值错误:传入值不符合预期。
  • 索引错误:索引超出范围。
  • 类型错误:类型不匹配。

示例:
x = 1 / 0 # 除零错误

异常处理方法

使用try-except语句捕捉异常,确保程序稳定运行。

示例:
try:
x = 1 / 0
except ZeroDivisionError:
print(“除零错误”)

还可以使用多个except分支处理不同类型的异常,或使用except Exception捕捉所有异常。

示例:
try:
x = 1 / 0
except ZeroDivisionError:
print(“除零错误”)
except FileNotFoundError:
print(“文件未找到”)
except Exception as e:
print(f"未知错误: {e}")

模块使用

模块简介

模块是封装好的代码,用于解决特定问题。Python提供了内置模块、第三方模块和自定义模块。

  • 内置模块:如time, random, collections等。
  • 第三方模块:如numpy, pandas, matplotlib等。
  • 自定义模块:用户编写的.py文件。

导入模块

使用import语句导入模块:

  • 导入整个模块import module_name
  • 导入特定函数/类from module_name import function_name
  • 导入所有内容from module_name import *

示例:
import math
from random import randint
from numpy import *

模块查找路径

模块查找路径有三个优先级:

  1. 内存中已加载的模块。
  2. 内置模块。
  3. sys.path中的路径。

示例:
import sys
print(sys.path)

如果模块不在上述路径中,可以将其路径添加到sys.path中。

示例:
sys.path.append(‘/path/to/module’)


markdown

文件读写部分

单选题

  1. 文件打开的通用格式是什么?

    • A. open("file_path", "mode")
    • B. with open("file_path", "mode") as f
    • C. with open("file_path", "mode")
    • D. open("file_path", "mode") as f
      答案:B
  2. with open 后面的模式参数中,r 表示什么?

    • A. 只写模式
    • B. 追加模式
    • C. 只读模式
    • D. 创建模式
      答案:C
  3. 在 Windows 系统下,默认的字符编码是什么?

    • A. UTF-8
    • B. GBK
    • C. ASCII
    • D. ISO-8859-1
      答案:B
  4. w 模式打开文件时,如果文件不存在会怎样?

    • A. 报错
    • B. 创建新文件
    • C. 打开现有文件
    • D. 覆盖现有文件
      答案:B
  5. a 模式打开文件时,如果文件不存在会怎样?

    • A. 报错
    • B. 创建新文件
    • C. 打开现有文件
    • D. 覆盖现有文件
      答案:B

判断题

  1. 使用 with open 语句块可以自动关闭文件,不需要手动调用 close() 方法。
    答案:正确

  2. r+ 模式可以同时读取和写入文件,但如果文件不存在则会报错。
    答案:正确

  3. w+ 模式可以同时读取和写入文件,但如果文件已存在则会覆盖原有内容。
    答案:正确

  4. a+ 模式可以同时读取和写入文件,并且会在文件末尾追加内容。
    答案:正确

  5. b 模式可以单独使用,表示二进制文件模式。
    答案:错误

异常处理部分

单选题

  1. Python 中捕获所有异常的关键字是什么?

    • A. try
    • B. except
    • C. finally
    • D. Exception
      答案:D
  2. try-except 结构中,except 后面可以跟多个异常类型,用什么符号分隔?

    • A. ,
    • B. ;
    • C. :
    • D. |
      答案:A
  3. try-except-else 结构中,else 块在什么时候执行?

    • A. try 块中发生异常时
    • B. try 块中未发生异常时
    • C. 总是执行
    • D. 从不执行
      答案:B
  4. try-except-finally 结构中,finally 块在什么时候执行?

    • A. try 块中发生异常时
    • B. try 块中未发生异常时
    • C. 总是执行
    • D. 从不执行
      答案:C
  5. 捕获异常时,使用 as 关键字可以做什么?

    • A. 忽略异常
    • B. 捕获异常的具体信息
    • C. 终止程序
    • D. 重新抛出异常
      答案:B

模块导入部分

单选题

  1. 导入整个模块使用的语法是什么?

    • A. from module import *
    • B. import module
    • C. from module import function
    • D. import module.function
      答案:B
  2. 从模块中导入特定函数使用的语法是什么?

    • A. from module import *
    • B. import module
    • C. from module import function
    • D. import module.function
      答案:C
  3. 导入模块中的所有函数和类使用的语法是什么?

    • A. from module import *
    • B. import module
    • C. from module import function
    • D. import module.function
      答案:A
  4. 模块查找路径的优先级顺序是什么?

    • A. 内存 -> 内置模块 -> sys.path
    • B. 内置模块 -> 内存 -> sys.path
    • C. 内存 -> sys.path -> 内置模块
    • D. 内置模块 -> sys.path -> 内存
      答案:A
  5. 如何将新的路径添加到模块查找路径中?

    • A. sys.path.append("new_path")
    • B. sys.path.add("new_path")
    • C. sys.path.insert("new_path")
    • D. sys.path.extend("new_path")
      答案:A

一、文件读写操作

题目1

根据文章内容,完成一个Python程序,该程序读取一个TXT文件,统计所有字符出现的频次,并将结果保存到另一个TXT文件中。

答案:
程序逻辑如下:

  1. 使用open函数以读取模式(r)打开源TXT文件,使用read方法读取文件内容并赋值给变量s
  2. 将读取的内容传入一个自定义函数,此函数返回一个字典,字典键为字符,值为字符出现次数。
  3. 以写入模式(w)打开目标TXT文件。
  4. 使用for循环遍历字典,将字符及其频次逐行写入目标TXT文件。
题目2

程序执行后,假设源TXT文件是一篇小说,为什么输出的结果中数字较多?

答案:
因为这篇文本是一篇小说,而小说中往往包含大量对话、章节编号等元素,这些都可能含有数字,所以统计结果显示数字出现频率较高。

二、异常处理

题目3

根据文章内容,编写一段代码,提示用户输入一个数字,并确保用户输入的是有效数字,如果不是数字则提示错误信息。

答案:
程序逻辑如下:
使用while True创建一个死循环,在循环体内使用try-except结构捕获异常。try部分尝试将用户输入转换为数字,如果发生异常(如输入非数字),则在except分支中提示用户重新输入,直到输入正确跳出循环进入else分支打印用户输入的数字。

题目4

当用户输入字符或特殊符号时,程序如何响应?请举例说明。

答案:
当用户输入字符例如’a’,程序会提示"你输入的不是一个数字";当输入特殊符号例如’@',同样会提示"你输入的不是一个复字"(原文表述应为"你输入的不是一个数字")。只有当用户输入有效的数字,比如’123’时,程序才会显示"你输入的一个数字是123"并结束循环。

三、模块导入与调用

题目5

根据文章内容,构建一个名为screening_prime.py的模块,其中包含一个函数用于筛选n以内所有素数。请写出该函数的主要逻辑。

答案:
程序逻辑如下:
定义一个名为is_prime的函数,接收参数number表示待检测的数。若number等于1则直接返回False,因为1不是素数。接下来使用for循环从2开始遍历到number平方根加1(取整),检查number能否被当前迭代变量i整除,如果能则返回False表示不是素数。如果循环结束后没有找到任何因子,则返回True表示是素数。

题目6

在一个新的Python脚本中,如何导入screening_prime模块中的is_prime函数,并使用它找出1000以内的所有素数?

答案:
程序逻辑如下:
from screening_prime import is_prime。接着使用for循环从1到1000遍历每个数字i,对于每个i调用is_prime(i)判断是否为素数,如果是则打印该数字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

六月五日

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

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

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

打赏作者

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

抵扣说明:

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

余额充值