我的编程空间,编程开发者的网络收藏夹
学习永远不晚

一文搞懂文件操作与异常模块

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

一文搞懂文件操作与异常模块

本文转载自微信公众号「数据STUDIO」,作者云朵君  。转载本文请联系数据STUDIO公众号。

大家好!我是云朵君,今天给大家带来一篇Python文件操作与异常处理,这两个部分往往是初学者入门时容易忽略的部分。大家重点的精力都放在如何写出高大上的算法,如何画出酷炫的图形,如何使用机器学习模型等等,而常常容易忽略Python文件操作与异常处理,这两个看似不起眼却在python中却担着至关重要的角色。下面我们就来一起看看吧。

文件操作

我们的程序可以读取文件,也可以写入文件。默认情况下,文件以读模式('r')打开,但也可以以写模式('w')和附加模式('a')打开。

你的程序可以从文件中读取信息,也可以向文件中写入数据。从文件中读取可以让你处理各种各样的信息;写入文件允许用户在下次运行你的程序时重新开始。您可以将文本写入文件,还可以将Python结构(如列表)存储在数据文件中。

读取文件

要从文件中读取,程序需要打开文件,然后读取文件的内容。您可以一次读取文件的全部内容,也可以逐行读取文件。with语句确保当程序完成对文件的访问后,文件被正确地关闭。

  • 一次读取整个文件
  1. filename = 'siddhartha.txt' 
  2. with open(filename) as f_obj: 
  3.     contents = f_obj.read() 
  4. print(contents) 
  • 逐行读取

从文件中读取的每一行在行尾都有一个换行符,而print函数会添加它自己的换行符。rstrip()方法消除了打印到终端时会产生的额外空白行。

  1. filename = 'siddhartha.txt' 
  2. with open(filename) as f_obj: 
  3.     for line in f_obj: 
  4. print(line.rstrip()) 
  • 将行存储在列表中
  1. filename = 'siddhartha.txt' 
  2. with open(filename) as f_obj: 
  3.     lines = f_obj.readlines() 
  4. for line in lines: 
  5.     print(line.rstrip()) 
  • 写入文件

将'w'参数传递给open()告诉Python你想写入文件。小心:如果文件已经存在,这将删除文件的内容。

传递'a'参数告诉Python你想要添加到一个现有文件的末尾。

  • 写入一个空文件
  1. filename = 'programming.txt' 
  2. with open(filename, 'w'as f: 
  3.     f.write("I love programming!"
  • 向空文件写入多行
  1. filename = 'programming.txt' 
  2. with open(filename, 'w'as f: 
  3.     f.write("I love programming!\n"
  4.     f.write("I love creating new games.\n"
  • 追加写入文件
  1. filename = 'programming.txt' 
  2. with open(filename, 'a'as f: 
  3.     f.write("I also love working with data.\n"
  4.     f.write("I love making apps as well.\n"

文件路径

当Python运行open()函数时,它会在存储正在执行的程序的同一目录中查找文件。可以使用相对路径从子文件夹中打开文件。也可以使用绝对路径来打开系统中的任何文件。

  • 从子文件夹中打开文件
  1. f_path = "text_files/alice.txt" 
  2. with open(f_path) as f_obj: 
  3.     lines = f_obj.readlines() 
  4. for line in lines: 
  5.     print(line.rstrip()) 
  • 使用绝对路径打开文件
  1. f_path = "/home/ehmatthes/books/alice.txt" 
  2. with open(f_path) as f_obj: 
  3.     lines = f_obj.readlines() 
  • 在Windows上打开文件

Windows有时会错误地解释正斜杠。如果遇到这种情况,请在文件路径中使用反斜杠。

  1. f_path = r"C:\Users\ehmatthes\books\alice.txt" 
  2. with open(f_path) as f_obj: 
  3.     lines = f_obj.readlines() 

Except异常模块

异常是帮助程序以适当方式响应错误的特殊对象。例如,如果程序试图打开一个不存在的文件,可以使用异常来显示一个信息丰富的错误消息,而不是使程序崩溃。

将可能导致错误的代码放置在try块中。响应错误时应该运行的代码位于except块中。只有在try块成功时才应该运行的代码被放入else块。

  1. prompt = "How many tickets do you need? " 
  2. num_tickets = input(prompt) 
  3. try: 
  4.     num_tickets = int(num_tickets) 
  5. except ValueError: 
  6.     print("Please try again."
  7. else
  8.     print("Your tickets are printing."

try-except代码块

  • 处理ZeroDivisionError异常
  1. try: 
  2.     print(5/0) 
  3. except ZeroDivisionError: 
  4.     print("You can't divide by zero!"
  • 处理FileNotFoundError异常
  1. f_name = 'siddhartha.txt' 
  2. try: 
  3.     with open(f_name) as f_obj: 
  4.         lines = f_obj.readlines() 
  5. except FileNotFoundError: 
  6.     msg = "Can't find file {0}.".format(f_name) 
  7.     print(msg) 

在编写代码时,很难知道要处理哪种异常。尝试编写没有try块的代码,并让它生成一个错误。回溯将告诉您程序需要处理哪种异常。

else代码块

try块应该只包含可能导致错误的代码。任何依赖于try块成功运行的代码都应该放在else块中。

  • 使用else块
  1. print("Enter two numbers. I'll divide them."
  2. x = input("First number: "
  3. y = input("Second number: "
  4. try: 
  5.     result = int(x) / int(y) 
  6. except ZeroDivisionError: 
  7.     print("You can't divide by zero!"
  8. else
  9.    print(result) 
  • 防止用户输入导致的崩溃

如果没有下面示例中的except块,如果用户试图除零,程序将崩溃。正如所写的,它将优雅地处理错误并继续运行。

  1. # 一个简单的除法计算器。 
  2. print("Enter two numbers. I'll divide them."
  3. print("Enter 'q' to quit."
  4. while True
  5.     x = input("\nFirst number: "
  6.     if x == 'q'
  7.         break 
  8.     y = input("Second number: "
  9.     if y == 'q'
  10. break 
  11.     try: 
  12.         result = int(x) / int(y) 
  13.     except ZeroDivisionError: 
  14.         print("You can't divide by zero!"
  15.     else
  16.         print(result) 

默默地失败

有时希望程序在遇到错误时继续运行,而不向用户报告错误。在else块中使用pass语句可以做到这一点。

  • 在else块中使用pass语句
  1. f_names = ['alice.txt''siddhartha.txt'
  2.            'moby_dick.txt''little_women.txt'
  3. for f_name in f_names: 
  4.     # 报告找到的每个文件的长度。 
  5.     try: 
  6.         with open(f_name) as f_obj: 
  7.             lines = f_obj.readlines() 
  8.     except FileNotFoundError: 
  9.         # 继续看下一个文件。 
  10.         pass  
  11.   else
  12.         num_lines = len(lines) 
  13.         msg = "{0} has {1} lines.".format( 
  14.             f_name, num_lines) 
  15.         print(msg) 

避免空的except块

异常处理代码应该捕获在程序执行期间预期发生的特定异常。空的except块将捕获所有异常,包括在强制关闭程序时可能需要的键盘中断和系统退出。

如果你想使用try块,但又不确定要捕获哪个异常,那么使用exception。它将捕获大多数异常,但仍然允许您故意中断程序。

  • 避免空的except块
  1. try: 
  2.    # Do something 
  3. except
  4.    pass 
  • 使用Exception
  1. try: 
  2.     # Do something 
  3. except Exception: 
  4.     pass 
  • 打印异常
  1. try: 
  2.     # Do something 
  3. except Exception as e: 
  4.     print(e, type(e)) 

使用json存储数据

json模块允许您将简单的Python数据结构转储到一个文件中,并在程序下次运行时从该文件加载数据。JSON数据格式不是特定于Python的,所以你也可以与使用其他语言的人共享这类数据。

在处理存储的数据时,了解如何管理异常非常重要。在处理数据之前,通常希望确保试图加载的数据存在。

  • 使用json.dump()存储数据
  1. # 存储一些数字。 
  2. import json 
  3. numbers = [2, 3, 5, 7, 11, 13] 
  4. filename = 'numbers.json' 
  5. with open(filename, 'w'as f_obj: 
  6.     json.dump(numbers, f_obj) 
  • 使用json.load()存储数据
  1. # 加载一些以前存储的数字。 
  2. import json 
  3. filename = 'numbers.json' 
  4. with open(filename) as f_obj: 
  5.     numbers = json.load(f_obj) 
  6. print(numbers) 
  • 确保存储的数据存在
  1. import json 
  2. f_name = 'numbers.json' 
  3. try: 
  4.     with open(f_name) as f_obj: 
  5.         numbers = json.load(f_obj) 
  6. except FileNotFoundError: 
  7.     msg = "Can’t find {0}.".format(f_name) 
  8.     print(msg) 
  9. else
  10.     print(numbers) 

决定报告哪些错误

编写良好、经过适当测试的代码不太容易出现内部错误,比如语法或逻辑错误。但是,每当你的程序依赖于诸如用户输入或文件存在之类的外部因素时,就有可能引发异常。

 

如何将错误传达给用户取决于你自己。有时用户需要知道一个文件是否丢失了;有时最好是静默地处理错误。一点经验会帮助你知道该报告多少。

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

一文搞懂文件操作与异常模块

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

一文搞懂文件操作与异常模块

今天给大家带来一篇Python文件操作与异常处理,这两个部分往往是初学者入门时容易忽略的部分。

如何理解文件操作与异常模块

这篇文章主要讲解了“如何理解文件操作与异常模块”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解文件操作与异常模块”吧!文件操作我们的程序可以读取文件,也可以写入文件。默认情况下,文件以
2023-06-15

一文搞懂 Java8 reduce操作

我们使用 parallelStream() 方法将列表转换为并行流,再使用 reduce() 方法对整数列表进行 reduce 操作,并使用 Integer::sum 作为合并函数 combiner,将并行计算的结果合并。
CPUJava8列表2024-11-30

一文搞懂C语言中的文件操作

文件操作想必大家掌握的并不熟练,确实因为我们用的并不多,而本节内容能够让大家初步认识文件操作,从文件认识到文件使用,让我们对c语言文件操作有个初步的了解
2022-11-21

一文搞懂 parseInt()函数异常行为

这篇文章主要为大家介绍了一文搞懂 parseInt()函数异常行为示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-20

一文带你搞懂Python中Pickle模块

把 Python 对象直接保存到文件里,而不需要先把它们转化为字符串再保存,也不需要用底层的文件访问操作,直接把它们写入到一个二进制文件里。pickle 模块会创建一个 Python 语言专用的二进制格式,不需要使用者考虑任何文件细节,它会

一文搞懂Python中subprocess模块的使用

subprocess是子流程,即进程的意思,该模块可以启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。本文将和大家聊聊subprocess模块的使用,需要的可以参考一下
2022-11-21

Python os 模块文件操作

#【Python】计算当前文件夹下所有文件的大小import osall_files = os.listdir(os.curdir)            #os.curdir表示当前目录。也可使用'.'file_dict = dict()
2023-01-31

如何用C语言操作sqlite3,一文搞懂

sqlite3编程接口非常多,对于初学者来说,我们暂时只需要掌握常用的几个函数,其他函数自然就知道如何使用了。

Python模块、包、异常、文件(案例)

Python模块、包、异常、文件(案例)python.py#模块# Python中的模块(Module),是一个Python文件,以.py文件结尾,包含了Python对象定义和Python语句,# 类似Java中的多个单独的Java文件,把
2023-01-30

一文带你搞懂Python中变量与常量

本文基于Python基础,主要介绍了Python基础中变量和常量的区别,对于变量的用法做了详细的讲解,用丰富的案例 ,代码效果图的展示帮助大家更好理解 。

python3文件操作相关模块

os模块:os.curdir'.'os.pardir'..'os.sep #路径分隔符,不同的操作系统看到的结果不一样'/'os.linesep #换行符,不同的操作系统看到的也不一样,windox'\n'os.getcwd() #获取
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录