《Python编程—从入门到实践》学习笔记(9)

文件和异常

从文件中读取数据

​ Python读取文件都是以字符串的形式储存,如果需要使用其他类型的数据需要进行转换。如用int()float()等。

读取整个文件

​ 创建一个文本文件000.txt,内容如下。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KVJngOtZ-1580111485825)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200127143308382.png)]
open()返回一个表示文件的对象,储存在as后面的变量中,在之后可以用这个对象的方法read()来读取文件内容,而with的作用就是在冒号后面的语句结束后自动关闭文件。

with open('000.txt') as file_object:
    contents = file_object.read()
    print(contents)
'''
结果:
rick
frank
alex
'''
一个包含文件各行内容的列表

​ 这里对表示文件的对象使用方法readlines(),即可返回一个这样的列表。

file_name = '000.txt'
with open(file_name) as file_object:
    lines = file_object.readlines()
print(lines)
'''
结果:
['rick\n', 'frank\n', 'alex']
'''
使用文件内容的一个实例

​ 创建一个文本文件pi.txt,内容如下。
在这里插入图片描述

with open('pi.txt') as file_object:		#打开文件
    lines = file_object.readlines()		#读取每行内容并储存在列表中
pi = ''		#创建一个空字符串
for line in lines:
    pi += line.strip()		#遍历列表并储存内容,去掉空格
print(pi)
'''
结果:
3.141592653589793238462643383279
'''

写入文件

​ 需要写入文件时就在open()里面加一个参数,可以是’r’(读取模式)、‘w’(写入模式)、‘a’(附加模式)。然后在方法write()后面写入内容。

with open('000.txt','w') as file_object:
    file_object.write('I love programming!')		#写入模式下写入的内容会把原先内容覆盖
with open('000.txt','a') as file_object:
    file_object.write('\nI also love playing games!')	#附加模式则是在原有内容后面添加内容

异常

try-except-else代码块

​ 这个代码块的工作原理是先执行try里面的语句,如果没有遇到错误,则执行else里面的语句(如果没有else就直接跳过);如果遇到了错误,就根据错误的种类执行except里面的语句(如果except里面的语句为pass则什么都不做)。

try:
    answer = 5/0
except ZeroDivisionError:
    print("Can't divide by zero.")
else:
    print(answer)
    
try:
    answer = 6/3
except ZeroDivisionError:
    print("Can't divide by zero.")
else:
    print(answer)
    
'''
结果:
Can't divide by zero.
2.0
'''

常见的异常有:

FileNotFoundError 无法找到指定文件

BaseException 所有异常的基类
SystemExit 解释器请求退出
KeyboardInterrupt 用户中断执行(通常是输入^C)
Exception 常规错误的基类
StopIteration 迭代器没有更多的值
GeneratorExit 生成器(generator)发生异常来通知退出
StandardError 所有的内建标准异常的基类
ArithmeticError 所有数值计算错误的基类
FloatingPointError 浮点计算错误
OverflowError 数值运算超出最大限制
ZeroDivisionError 除(或取模)零 (所有数据类型)
AssertionError 断言语句失败
AttributeError 对象没有这个属性
EOFError 没有内建输入,到达EOF 标记
EnvironmentError 操作系统错误的基类
IOError 输入/输出操作失败
OSError 操作系统错误
WindowsError 系统调用失败
ImportError 导入模块/对象失败
LookupError 无效数据查询的基类
IndexError 序列中没有此索引(index)
KeyError 映射中没有这个键
MemoryError 内存溢出错误(对于Python 解释器不是致命的)
NameError 未声明/初始化对象 (没有属性)
UnboundLocalError 访问未初始化的本地变量
ReferenceError 弱引用(Weak reference)试图访问已经垃圾回收了的对象
RuntimeError 一般的运行时错误
NotImplementedError 尚未实现的方法
SyntaxError Python 语法错误
IndentationError 缩进错误
TabError Tab 和空格混用
SystemError 一般的解释器系统错误
TypeError 对类型无效的操作
ValueError 传入无效的参数
UnicodeError Unicode 相关的错误
UnicodeDecodeError Unicode 解码时的错误
UnicodeEncodeError Unicode 编码时错误
UnicodeTranslateError Unicode 转换时错误
Warning 警告的基类
DeprecationWarning 关于被弃用的特征的警告
FutureWarning 关于构造将来语义会有改变的警告
OverflowWarning 旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning 关于特性将会被废弃的警告
RuntimeWarning 可疑的运行时行为(runtime behavior)的警告
SyntaxWarning 可疑的语法的警告
UserWarning 用户代码生成的警告

存储数据

​ 上面提到的储存方法只能以字符串的形式读取和写入数据,为了能将Python中的数据结构存储到文件中,就需要用到json模块。

json.dump()json.load()

json.dump()接受两个参数,一个是需要存入的数据,另一个是文件对象(注意是文件对象而不是直接用文件名)。

json.load()接受一个参数,即是需要读取的文件对象。函数返回的是一个数据结构。

import json		#导入json模块

numbers = [0,1,2,3,4,5]
filename = 'numbers.json'

with open(filename,'w') as f_obj:
    json.dump(numbers,f_obj)		#存入列表numbers
with open(filename) as f_obj:
    numbers1 = json.load(f_obj)		#读取numbers.json中的数据
print(numbers1)
'''
结果:
[0, 1, 2, 3, 4, 5]
'''
发布了9 篇原创文章 · 获赞 0 · 访问量 173

猜你喜欢

转载自blog.csdn.net/RICK_00/article/details/104093262