Python基础学习-文件和异常

学习处理文件和保存数据可让你的程序使用起来更容易,学习处理异常可帮助你应对文件不存在的情况,以及其他可能导致程序崩溃的问题。通过本章的学习可提高程序的适用性、可用性和稳定性。

一:从文件中读取文件:

1:读取整个文件:

① 首先创建一个文件pi_digits.txt

② 文件路径:

◆ 在Windows系统中,在文件路径中使用反斜杠(\) 而不是斜杠(/)

◆ 通过使用绝对路径,可读取系统任何位置的文件。

◆ 另外,由于反斜杠在Python中被视为转义字符,为确保万无一失,应以 原始字符串形式指定路径,即在开头的引号之前加上r。

③ 下面的程序打开并读取这个文件,再将其内容显示到屏幕上

◆ 关键字with在不需要访问文件的时候将文件关闭。

◆ 函数open()接受一个参数:要打开的文件的名称。

◆ 关键字as将文件“pi_digits.txt”重命名为 file_object,方便调用。

输出:

2:逐行读取:对文件对象使用for循环

输出:

要消除多余的空白行,可在print语句中使用rstrip():

输出:

3:创建一个包含文件各行内容的列表

输出:

4:使用文件的内容

输出:

二:写入文件

① 在如下示例中,调用open()函数时提供了两个实参:

一个实参是要打开的文件的名字(如果文件不存在,Python将自动创建它)

另一个是打开文件的模式,可指定只读模式("r"),写入模式("w"),附加模 式("a")等。

② Python只能将字符串写入文本文件,要将数值数据写入文本文件中,必须 先使用函数str()将其转换为字符串格式。

1:写入空文件

在当前工作目录下自动生成已写好的文件

打开文件programming.txt,将看到如下内容:

2:写入多行:函数write()不会在写入的文本末尾添加换行符,要让每个字符串独占一行,需要在write语句中包含换行符“\n”

输出:

3:附加到文件:以附加模式'a'打开文件,你写入到文件的行都将添加到文件末尾。如果文件不存在,Python将创建一个空文件。

输出:

三:异常

① 异常是使用try-except代码块处理的。

② 如果try代码块中的代码运行起来没有问题,Python将跳过except代码 块;

③ 如果try代码块中的代码导致了异常,Python将查找这样的except代码 块,并运行其中的代码

1:使用try-except代码块

输出:

2:else代码块:

通常将可能引发错误的代码放在try-except代码块中,可提高代码抵御错误能力依赖于try代码块成功执行的代码都应该放在else代码块中。

输出:

3:处理FileNotFoundError异常

输出:

4:分析文本:

◆ 分析Python之禅这首诗有多少个单词。

◆ 使用方法split(),它将根据一个字符串创建一个单词列表。

输出:

5:使用多个文件:

输出:

6:失败时一声不吭:

Python中有一个pass语句,可在代码块中使用它来让Python什么都不做。

输出:

四:存储数据

① 一种简单的方式是使用模块json来存储数据。

② 函数json.dump()接受两个对象:要存储的数据以及可用于存储数据的文 件对象。

1:使用json.dump()来存储数据:

输出:

2:使用json.load()来读取数据

输出:

3:保护和读取用户生成的数据

输出:

五:重构:

◆ 将代码划分为一系列完成具体工作的函数,这样的过程被称为重构。

◆ 重构让代码更清晰,更易于理解,更容易扩展。

# 重构上个问候用户的程序

import json

def get_stored_username():

"""如果存储了用户名,就获取它"""

filename = "username.json"

try:

with open(filename) as file_object:

username = json.load(file_object)

except FileNotFoundError:

return None

else:

return username

def get_new_username():

"""提示用户输入用户名"""

username = input("What is your name? ")

filename = "username.json"

with open(filename, "w") as file_object:

json.dump(username, file_object)

return username

def greet_user():

"""问候用户,并指出其名字"""

username = get_stored_username()

if username:

print("Welcome back, " + username + "!")

else:

username = get_new_username()

print("We'll remember you when you come back, " + username + "!")

greet_user()

输出:

每天学习一点点,每天进步一点点。

原文发布于微信公众号 - 小白客(youcoding)

原文发表时间:2017-10-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏蓝天

优雅的让一个类在线程安全和线程非安全间切换

一个良好的多线程库,不应当一刀切的全加锁。因为有些时候,虽然是多线程环境,但可能依照设计一个类只会被一个线程操作,这个时候加锁是多余的,纯浪费性能,但另一些场景...

632
来自专栏丑胖侠

《Drools7.0.0.Final规则引擎教程》第4章 4.2 activation-group& dialect& date-effective

activation-group 该属性将若干个规则划分成一个组,统一命名。在执行的时候,具有相同activation-group 属性的规则中只要有一个被执行...

23310
来自专栏DOTNET

【翻译】MongoDB指南/聚合——聚合管道

【原文地址】https://docs.mongodb.com/manual/ 聚合 聚合操作处理数据记录并返回计算后的结果。聚合操作将多个文档分组,并能对已分组...

32610
来自专栏崔庆才的专栏

爬虫速度太慢?来试试用异步协程提速吧!

在执行一些 IO 密集型任务的时候,程序常常会因为等待 IO 而阻塞。比如在网络爬虫中,如果我们使用 requests 库来进行请求的话,如果网站响应速度过慢,...

4461
来自专栏极客猴

os.path 模块用法详解

总所周知,Windows 操作系统和 Linux 系统存在很多不兼容的地方。文件路径就是一个明显的例子。在 Linux 中,路径的分割采用正斜杠 "/",比如 ...

923
来自专栏IT可乐

Java关键字——native

  本篇博客我们将介绍Java中的一个关键字——native。   native 关键字在 JDK 源码中很多类中都有,在 Object.java类中,其 ge...

30611
来自专栏思考的代码世界

Python编程从入门到实践之文件和异常处理|第12天

要使用文本文件中的信息,首先需要将信息读取到内存中。为此,我们可以一次性读取文件的 全部内容,也可以以每次一行的方式逐步读取。

4467
来自专栏醒者呆

你不想干我帮你——代理模式

关键字:设计模式,代理模式,proxy,保护代理,虚拟代理,远程代理,缓冲代理,智能引用代理 代理模式 代理模式:给某一个对象提供一个代理或占位符,并由...

3404
来自专栏码洞

Spark通信原理之Python与JVM的交互

我们知道Spark平台是用Scala进行开发的,但是使用Spark的时候最流行的语言却不是Java和Scala,而是Python。原因当然是因为Python写代...

1191
来自专栏Python中文社区

PyQt的一个UI单元测试框架思路

專 欄 ❈丁果,Python中文社区作者。对django、pyqt、opencv、tornado感兴趣。 GitHub:https://github.com/...

2956

扫码关注云+社区

领取腾讯云代金券