您的位置:首页 > 编程语言 > Python开发

Python学习笔记10-文件和异常

2019-08-01 14:29 309 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_43520670/article/details/97886486

文件和异常

1.从文件中读取数据
要使用文本文件中的信息,首先需要将信息读取到内存中。为此,你可以一次性读取文件的全部内容,也可以以每次一行的方式读取。
(1)读取整个文件
首先我们在Python37的目录下创建一个文件test.txt,如图
然后利用下面的程序打开并读取这个文件,再将其内容显示到屏幕上

filename = 'test.txt'with open(filename) as file:
message = file.read()
print(message)

结果,在屏幕上输出以下信息
解释:
第一行代码,将文件的相对路径储存在变量filename。
第二行代码,首先看open()函数,它的作用是以任何方式使用文件,它接受一个参数:要打开的文件名称,即filename,然后将返回的对象储存在file变量中,最后讲讲with,它表示在不需要访问文件后将其关闭,当然,也可以用close()来关闭,但是如果close()未执行,将无法关闭文件,过早执行也会导致错误,使用一般不用close()而用with。
第三行代码,读取file中的文件,将其传到变量message中。
第四行代码,输出变量message中的文件。
(2)逐行读取
代码

filename = 'test.txt'
with open(filename) as file:
for message in file:
print(message)

结果
解释:
其他与前面差不多,就是使用了for循环来实现逐行读取。至于为什么会换行,是因为在这个文件中,每行行末都有一个看不见的换行符。

2.文件路径
(1)绝对路径
就是文件在计算机的具体位置
比如:

C:\Users\Shinelon\AppData\Local\Programs\Python\Python37\test.txt

这是test.txt在我计算机中的具体位置,所以这个路径叫绝对路径。
如果你的是Windows系统,而且在编写Python代码时要用到绝对路径,请务必在单引号前加个r,不然可能会出现错误。
如下

filename = r'C:\Users\Shinelon\AppData\Local\Programs\Python\Python37\test.txt'

(2)相对路径
相对路径就是相对于当前运行的程序所在目录的。也就是说,必须位于该程序所在的目录下。如上,我的test.txt位于Python37目录下,我要访问的话,如下

filename = 'test.txt'

3.写入文件
要写入文本文件,你在调用open()时需要提供另一个实参,告诉Python你要写入打开的文件。下面看一个例子:

filename = 'test.txt'
with open(filename,'w') as file:
file.write("Hello world!")

结果
控制台没有任何输出

test.txt文件写入了Hello world!

在这个例子中,调用open()时提供了两个实参。第一个实参也是要打开的文件的名称;第二个实参(‘w’)告诉Python,我们要以写入模式打开这个文件。打开文件时,可指定读取模式(‘r’)、写入模式(‘w’)、附加模式(‘a’)和读写模式(‘r+’),如果没有指定模式实参,Python将以默认的只读模式打开文件。如果你指定的文件不存在,函数open()将自动创建它。
注意:Python只能将字符串写入文本文件。要将数值数据存储到文本文件中,必须先使用函数str()将其转换为字符串格式。

4.异常
(1)什么是异常
Python使用被称为异常的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知所措的错误时,它都会创建一个异常对象。如果你编写了处理异常的代码,程序将继续执行;如果没有,程序将停止,并显示一个traceback,其中包含有关异常的报告。
(2)处理异常
如图

我们输出10/0会跳出一个ZeroDivisionError,我们试着用try-except解决这个异常。
如下

try:
print(10/0)
except ZeroDivisionError:
print("You can not divide by zero!")

结果

很明显,在执行print(10/0)时没有停下,而是继续执行程序,所以异常就被处理了。
(3)else代码块
else代码块可以存在于try-except-else这个结构中,依赖于try代码块成功执行的代码应该放在else代码块中,如下

try:
number = 10/2
except ZeroDivisionError:
print("You can not divide by zero!")
else:
print(number)

结果

因为没有出现错误,所以执行else后面的语句。
(4)pass语句,pass语句是让Python什么都不做的语句,可以在else和except后面使用让它们什么也不做,如下

try:
number = 10/0
except ZeroDivisionError:
pass
else:
print(number)

结果

结果Python直接跳过了那个错误。

5.储存数据
(1)json格式储存数据
有很多时候我们需要储存数据,而一种简单的方式是使用模块json来储存数据。模块json让你能够将简单的Python数据结构转储到文件中,并在程序再次运行时加载该文件中的数据。你还可以使用json在Python程序之间分享数据。更重要的是,json数据格式并非Python专用,也就是说以json格式储存的数据可以与使用其他编程语言的人分享。
(2)json.dump()和json.load()
我们来编写一个储存一组数字的简短程序,再编写一个将这些数字读取到内存中的程序。第一个程序将使用json.dump()来储存这组数字,而第二个程序将使用json.load()。
用json.dump()来储存数字列表:
代码

import json

numbers = [2,3,4,5,6]

filename = 'numbers.json'
with open(filename,'w') as file:
json.dump(numbers,file)

结果

解释:
首先,导入模块json,再创建一个数字列表
然后,指定文件名,通常用.json来指出文件储存的数据为json格式
之后,以写入模式打开数据,让json能够将数据写入其中
最后,用函数json.dump()来将numbers的数据写入json文件中
用json.load()将这个列表读取在内存中:
代码

import json

filename = 'numbers.json'
with open(filename) as file:
numbers = json.load(file)

print(numbers)

结果

这是一种在程序之间共享数据的简单方式。
(参考资料《Python编程从入门到实践》)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: