Python开发学习之Python文件操作与异常模块
小职 2021-05-31 来源 :数据STUDIO 阅读 454 评论 0

摘要:本文主要介绍了Python开发学习之Python文件操作与异常模块,通过具体的内容向大家展现,希望对大家Python的学习有所帮助。

本文主要介绍了Python开发学习之Python文件操作与异常模块,通过具体的内容向大家展现,希望对大家Python的学习有所帮助。

Python开发学习之Python文件操作与异常模块

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

 

文件操作

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

 

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

 

读取文件

 

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

 

一次读取整个文件

filename = 'siddhartha.txt'

with open(filename) as f_obj:

    contents = f_obj.read()

print(contents)

逐行读取

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

 

filename = 'siddhartha.txt'

with open(filename) as f_obj:

    for line in f_obj:

print(line.rstrip())

将行存储在列表中

filename = 'siddhartha.txt'

with open(filename) as f_obj:

    lines = f_obj.readlines()

for line in lines:

    print(line.rstrip())

写入文件

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

 

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

 

写入一个空文件

filename = 'programming.txt'

with open(filename, 'w') as f:

    f.write("I love programming!")

向空文件写入多行

filename = 'programming.txt'

with open(filename, 'w') as f:

    f.write("I love programming!\n")

    f.write("I love creating new games.\n")

追加写入文件

filename = 'programming.txt'

with open(filename, 'a') as f:

    f.write("I also love working with data.\n")

    f.write("I love making apps as well.\n")

文件路径

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

 

从子文件夹中打开文件

f_path = "text_files/alice.txt"

with open(f_path) as f_obj:

    lines = f_obj.readlines()

for line in lines:

    print(line.rstrip())

使用绝对路径打开文件

f_path = "/home/ehmatthes/books/alice.txt"

with open(f_path) as f_obj:

    lines = f_obj.readlines()

在Windows上打开文件

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

 

f_path = r"C:\Users\ehmatthes\books\alice.txt"

with open(f_path) as f_obj:

    lines = f_obj.readlines()

Except异常模块

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

 

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

 

prompt = "How many tickets do you need? "

num_tickets = input(prompt)

try:

    num_tickets = int(num_tickets)

except ValueError:

    print("Please try again.")

else:

    print("Your tickets are printing.")

try-except代码块

 

处理ZeroDivisionError异常

try:

    print(5/0)

except ZeroDivisionError:

    print("You can't divide by zero!")

处理FileNotFoundError异常

f_name = 'siddhartha.txt'

try:

    with open(f_name) as f_obj:

        lines = f_obj.readlines()

except FileNotFoundError:

    msg = "Can't find file {0}.".format(f_name)

    print(msg)

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

 

else代码块

 

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

 

使用else块

print("Enter two numbers. I'll divide them.")

x = input("First number: ")

y = input("Second number: ")

try:

    result = int(x) / int(y)

except ZeroDivisionError:

    print("You can't divide by zero!")

else:

   print(result)

防止用户输入导致的崩溃

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

 

# 一个简单的除法计算器。

print("Enter two numbers. I'll divide them.")

print("Enter 'q' to quit.")

while True:

    x = input("\nFirst number: ")

    if x == 'q':

        break

    y = input("Second number: ")

    if y == 'q':

break

    try:

        result = int(x) / int(y)

    except ZeroDivisionError:

        print("You can't divide by zero!")

    else:

        print(result)

默默地失败

 

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

 

在else块中使用pass语句

f_names = ['alice.txt', 'siddhartha.txt',

           'moby_dick.txt', 'little_women.txt']

for f_name in f_names:

    # 报告找到的每个文件的长度。

    try:

        with open(f_name) as f_obj:

            lines = f_obj.readlines()

    except FileNotFoundError:

        # 继续看下一个文件。

        pass  

  else:

        num_lines = len(lines)

        msg = "{0} has {1} lines.".format(

            f_name, num_lines)

        print(msg)

避免空的except块

 

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

 

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

 

避免空的except块

try:

   # Do something

except:

   pass

使用Exception

try:

    # Do something

except Exception:

    pass

打印异常

try:

    # Do something

except Exception as e:

    print(e, type(e))

使用json存储数据

 

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

 

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

 

使用json.dump()存储数据

# 存储一些数字。

import json

numbers = [2, 3, 5, 7, 11, 13]

filename = 'numbers.json'

with open(filename, 'w') as f_obj:

    json.dump(numbers, f_obj)

使用json.load()存储数据

# 加载一些以前存储的数字。

import json

filename = 'numbers.json'

with open(filename) as f_obj:

    numbers = json.load(f_obj)

print(numbers)

确保存储的数据存在

import json

f_name = 'numbers.json'

try:

    with open(f_name) as f_obj:

        numbers = json.load(f_obj)

except FileNotFoundError:

    msg = "Can’t find {0}.".format(f_name)

    print(msg)

else:

    print(numbers)

决定报告哪些错误

 

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

 

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


我是小职,记得找我

✅ 解锁高薪工作

✅ 免费获取基础课程·答疑解惑·职业测评

Python开发学习之Python文件操作与异常模块

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程