萌新向Python数据分析及数据挖掘 第一章 Python基础 第十节 文件和异常

第一章 Python基础

第十节 文件和异常

从文件中读取数据

读取文件、文件路径

 
 
 
 
 
1 filename = 'pi_digits.txt' #文件名取个代号
2 #读取整个文件    
3 with open(filename) as file_object:
4     contents = file_object.read()# 给内容取个代号
5     print(contents.rstrip())
6 #逐行读取
7 with open(filename) as file_object:
8     for line in file_object:#给一行内容取个代号
9         print(line.rstrip())
View Code
 

函数open():接受要打开文件的文件名作为参数。如果没有指定路径,则在当前执行的文件所在的目录中查找指定的文件。此函数返回一个表示文件的对象。

关键字with:表示在不需要访问文件之后将其关闭。

函数read():用于从文件读取指定的字节数,如果未给定或为负则读取所有。到达文件末尾时返回一个空字符串(空行)。打印时可使用函数rstrip()删掉。

相对文件路径:相对于当前运行的程序所在目录。

绝对文件路径:完整的文件路径。

创建包含文件各行内容的列表并使用

使用关键字with时,open()返回的文件对象只在with代码块内使用。如果要在with代码块外访问文件内容,可在里边将文件各行存储在一个列表中待后续使用。

 1 filename = 'pi_digits.txt'
 2 with open(filename) as file_object:
 3     lines = file_object.readlines()#读完文件
 4 
 5 pi_string = '' #
 6 for line in lines:
 7     pi_string += line.strip()#把每个line的内容去掉空格加入Pi——string
 8 
 9 print(pi_string #打印
10 print(len(pi_string))#量一下你有多长
View Code
 

注意:读取文本文件时,python将其中所有文本都解读稳字符串。

写入文件

将文本写入文件时,调用open()时需要提供另外一个实参。其中,第一个实参时要打开的文件的名称。第二个实参是指定的模式:读取模式('r')、写入模式('w')、附加模式('a')、读取和写入模式('r+'。如果省略将以默认的只读模式打开文件。

如果写入的文件不存在,则open()会自动创建它。如果以写入模式打开文件且指定文件对象存在,则返回文件对象前会清空改文件。

 
 
运行结果:
1 filename = 'programming.txt'
2 with open(filename, 'w') as file_object:
3     file_object.write("I love programming.")
4     file_object.write("I love programming.\n")#注意换行符\n
5     file_object.write("I love creating new games.\n")
View Code
 

注意:python只能将字符串写入文本文件。函数write()不会在写入的文本末尾添加换行符。

附加到文件

 
运行结果:
1 filename = 'programming.txt'
2 with open(filename, 'a') as file_object:#‘a’ 代表附加模式,在末尾添加内容
3     file_object.write("I also love finding meaning in large datasets.\n")
4     file_object.write("I love creating apps that can run in a browser.\n")
View Code
 

异常

异常时python用来管理程序执行期间发生错误的特殊对象。

异常是使用try-except代码块处理的。如果try代码块中的代码运行无误,则跳过except代码块;如果try代码块中的代码运行出现错误,则运行except代码块

 

ZeroDivisionError是一个异常对象。

1 try:#试试
2     print(5/0) #打印5除以0
3 except ZeroDivisionError: #要是爆发“除以0错误”
4     print("You can't divide by zero!")#打印你不能除以0
View Code
 

使用try-except代码块也可以隐藏Traceback,防止恶意攻击等等。

除了try-except代码块还有try-except-else代码块。其中try代码块只包含可能导致错误的代码,而依赖于其成功执行的代码都放在else代码块中。

如果希望发生错误时继续运行,可以在except代码块中使用pass语句pass语句还充当了占位符,用来提醒我们在程序的某个地方什么都没有做。

常见的异常类型如下:

AttributeError:属性错误,特性引用和赋值失败时会引发属性错误

NameError:试图访问的变量名不存在

SyntaxError:语法错误,代码形式错误

Exception:所有异常的基类,因为所有python异常类都是基类Exception的其中一员,异常都是从基类Exception继承的,并且都在exceptions python 模块中定义。

IOError:python ioerror,一般常见于打开不存在文件时会引发IOError错误,也可以解理为输出输入错误

KeyError:使用了映射中不存在的关键字(键)时引发的关键字错误

IndexError:索引错误,使用的索引不存在,常索引超出序列范围

TypeError:类型错误,内建操作或是函数应于在了错误类型的对象时会引发类型错误

ZeroDivisonError:除数为0,在用除法操作时,第二个参数为0时引发了该错误

ValueError:值错误,传给对象的参数类型不正确,像是给int()函数传入了字符串数据类型的参数。

更多内容可以看看怪伽先森小哥哥的文:

https://blog.csdn.net/u011033906/article/details/79653345

存储数据

模块json可以让我们将简单的python数据结构转储到文件中,并在程序再次运行时加载该文件中的数据。并且还可以使用json在python程序中分享数据。

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

 1 import json #让json来帮忙
 2 numbers = [2, 3, 5, 7, 11, 13]
 3 filename = 'numbers.json'
 4 
 5 with open(filename, 'w') as f_obj:
 6 #函数json.dump()接受两个实参:要存储的数据以及可用于存储数据的文件对象。
 7     json.dump(numbers, f_obj)
 8 
 9 #读取整个文件    
10 with open(filename) as file_object:
11     contents = file_object.read()# 给内容取个代号
12     print(contents.rstrip())
13     
14 with open(filename) as f_obj:#也可以用json.load来打开,毕竟是json自己写的东西,他当然有办法打开
15     numbers = json.load(f_obj)
16 print(numbers)
View Code
 

 

下面将存取数据和异常结合一下程序运行时,从文件获取用户名,若文件不存在,则提示输入用户名并存储:




 1 import json
 2 # 如果以前存储了用户名就加载它
 3 # 否则提示用户输入用户名并存储它
 4 filename = 'username.json'
 5 ask = ''
 6 while ask != "no":
 7     try:#试试打开username
 8         with open(filename) as f_obj:
 9             username = json.load(f_obj)
10     except FileNotFoundError: #如果发生“找不到文件”错误
11         username = input("What is your name? ")#让用户自己输入自己的名字
12         with open(filename, 'w') as f_obj:#打开一个以用户的名字的文件,要是没有就创建一个
13             json.dump(username, f_obj)#用json家的dump写文件
14             print("We'll remember you when you come back, " + username + "!")
15             #打印告诉用户我会记住你的
16             ask = input("Next one?yes/no ")
17     else:
18         print("Welcome back, " + username + "!")#要不就打印欢迎回来,某某某!
19         ask = input("Next one?yes/no ")        
View Code

猜你喜欢

转载自www.cnblogs.com/romannista/p/10336510.html