萌新向Python数据分析及数据挖掘 第一章 Python基础 第十节 文件和异常
Posted 跨界混子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了萌新向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())
函数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))#量一下你有多长
注意:读取文本文件时,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")
注意: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")
异常
异常时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
使用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)
下面将存取数据和异常结合一下程序运行时,从文件获取用户名,若文件不存在,则提示输入用户名并存储:
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 ")
以上是关于萌新向Python数据分析及数据挖掘 第一章 Python基础 第十节 文件和异常的主要内容,如果未能解决你的问题,请参考以下文章
萌新向Python数据分析及数据挖掘 第一章 Python基础 第十节 文件和异常
萌新向Python数据分析及数据挖掘 第一章 Python基础 第九节 类
萌新向Python数据分析及数据挖掘 第一章 Python基础 第一节 python安装以及环境搭建 第二节 变量和简单的数据类型
萌新向Python数据分析及数据挖掘 第三章 机器学习常用算法 第二节 线性回归算法 (下)实操篇
萌新向Python数据分析及数据挖掘 第二章 pandas 第二节 Python Language Basics, IPython, and Jupyter Notebooks
萌新向Python数据分析及数据挖掘 第二章 pandas 第五节 Getting Started with pandas