python基础→文件和异常

前提:为了让程序能够快速的分析大量的数据,我们需要学习处理文件。错误处理可以避免程序在面对意外情形时崩溃。并且学习异常, 它们是Python创建的特殊对象,用于管理程序运行时出现的错误;你还将学习模块json ,它让你能够保存用户数据,以免在程序停止运行后丢失。

一、从文件中读入数据。

创建一个包含几行文本的文件,(例如 number.txt)下面的程序将打开并读取这个文件,并将其显示在屏幕上:

with open('number.txt') as file_object:    
contents = file_object.read()    
print(contents)

因为read() 到达文件末尾时返回一个空字符串,而将这个空字符串显示出来时就是一个空行,要删除这行空格,只需要在print的时候使用rstrip():

with open('number.txt') as file_object:    
contents = file_object.read()    
print(contents.retrip())

这样的输出就与源文件没有区别。
当我们要读取得文件存在路径的时候:
如果只将简单的number.txt放入open中,Python将在当前执行的文件(即.py程序文件)所在的目录中查找文件,如果目标文件不在该目录中,就需要加入文件路径,它让Python到系统的特定位置 去查找。
假设number.txt存在于名称为text_files的文件夹中,我们可以这样子去读取它:
**注:**在Linux和OS X和Windows中,打开的方式是不一样的

with open('text_files/number.txt') as file_object:
#这是在Linux和OS X
with open('text_files\filename.txt') as file_object:
#这是在windows中

最保险的操作将文件在计算机中的准确位置告诉Python,这称为绝对文件路径(注意斜杠的方向)

当我们想创建一个包含文件各行内容的列表时, 使用readlines()方法可以从文件中读取每一行,并将其存储在一个列表中。

二、写入文件

示例:

  filename = 'number.txt' 
  with open(filename, 'w') as file_object:      
  file_object.write("I love 5201314.")

在这个示例中,调用open() 时提供了两个实参。第一个实参也是要打开的文件的名称;第二个实参(‘w’ )告诉Python,我们要以写入模式打开这个文件。打开文件时,可指定读取模式 (‘r’ )写入模式(‘w’ )附加模式 (‘a’ )或让你能够读取和写入文件的模式(‘r+’ )。如果你省略了模式实参,Python将以默认的只读模式打开文件。这样就会在.py文件的目录下创建一个名为number的txt文件,内容为"I love 5201314"

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

如果要存入多行数据,要注意换行符的使用,否则文件会黏在一起。

三、异常

前言:Python使用被称为异常的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继续运行;如果你未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。异常是使用try-except 代码块处理的。try-except 代码块让Python执行指定的操作,同时告诉Python发生异常时怎么办。使用了try-except 代码块时,即便出现异常, 程序也将继续运行:显示你编写的友好的错误消息,而不是令用户迷惑的traceback

1.处理ZeroDivisionError 异常

譬如当我们想让程序处理被除数为0的除法,程序会报错,提示如下

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

这时候需要使用try-except 代码块来处理引发的异常。
示例:

try:    
	print(4/0) 
except ZeroDivisionError:    
	print("You can't divide by zero!")

当我们输入被除数为0的时候,程序不会报错,会在屏幕中显示友好的提示。

延伸一下,便可以做出来一个简单的除法计算器:

print("Give me two numbers, and I'll divide them.")  
print("Enter 'q' to quit.")  
while True:      
	first_number = input("\nFirst number: ")      
	if first_number == 'q':          
		break      
	second_number = input("Second number: ")      
	if second_number == 'q':          
		break      
	try:
		answer = int(first_number) / int(second_number)
	except ZeroDivisionError:       
 		print("You can't divide by zero!")
 	else:
 		print(answer)

2.处理FileNotFoundError 异常

FileNotFoundError 异常:这是Python找不到要打开的文件时创建的异常。

FileNotFoundError: [Errno 2] No such file or directory: 'number.txt'

解决方法类似:

filename = 'number.txt'
try:    
	with open(filename) as f_obj:        
	contents = f_obj.read() 
except FileNotFoundError:    
	msg = "Sorry, the file " + filename + " does not exist."    
	print(msg)

在找不到该文件时,程序也不会崩溃,提示友好的信息,当然如果不希望程序提示任何东西,只需要在except:中填入pass。

四、存储数据

前言:很多程序都要求用户输入某种信息,如让用户存储游戏首选项或提供要可视化的数据。不管专注的是什么,程序都把用户提供的信息存储在列表和字典等数据结构中。用户关闭程序时,几乎总是要保存他们提供的信息;一种简单的方式是使用模块json 来存储数据模块json让你能够将简单的Python数据结构转储到文件中,并在程序再次运行时加载该文件中的数据。你还可以使用json 在Python程序之间分享数据。更重要的是,JSON数据 格式并非Python专用的,这让你能够将以JSON格式存储的数据与使用其他编程语言的人分享。这是一种轻便格式,很有用,也易于学习。

1.使用json.dump()和json.load()

编写一个存储一组数字的简短程序:

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)

猜你喜欢

转载自blog.csdn.net/qq_42785117/article/details/82988989