今天要介绍常见的IO操作,流程:开档 >> 处理 >> 关档,下面来讲解一些Python中的档案读写方法
# 开档
放档案的变数 = open( "档案路径" , mode = "开启的模式" , encoding = "编码格式" )
开启的模式有下列几种
# 开档
放档案的变数 = open( 档案路径 , mode = "开启的模式" , encoding = "编码格式" )
#读取全部文字
变数 = 放档案的变数.read()
#一行一行的读取文字
for 变数 in 放档案的变数:
将文字从 放档案的变数 一行一行的放入 变数 中
#写入档案
放档案的变数.write(字串)
#关闭档案
放档案的变数.close()
而上面这种写法虽然没有问题,但缺点就是必须手动加入关闭档案的程序码,不是很方便,也很容易忘记,除了以上的方法,比较常见的是with
关键字,在程序中对於档案和资源的管理是非常重要的,开启外部的档案要是没有被关闭,它就会一直占据着记忆体,而with
关键字可让我们更容易管理这些开启的资源,在with
区块之下,python 程序会自动进行资源的建立、清理与回收动作,这样的好处是with
区块执行完毕会自动安全的关闭档案,with
不仅可以用来开档,也能用来开网页,使用方式如下
with open( 档案路径 , mode = "开启的模式" , encoding = "编码格式" ) as 变数:
读取或写档的程序区块
此区块执行完毕会自动的关闭档案
将可能会出错的程序码放在try
的区块下,当try
的区块里面出现错误时,就执行except
区块内的程序码,可想而知,程序错误千百种,except
区块预设为只要发生错误就执行,当然,except
区块也能设定成只有发生特定的错误才执行,这种设定称为错误捕捉,操作方式如下
try:
程序区块......
except:
如果上方程序发生错误,则执行此程序区块
错误捕捉的方式为,在except
後方加上异常名称,就可以设定成当发生该异常时在执行except
区块,至於异常名称有哪些呢?我们可以看一下python标准异常这个东西
异常名称 | 描述 |
---|---|
BaseException | 所有异常的基类 |
SystemExit | 直译器请求退出 |
KeyboardInterrupt | 使用者中断执行(通常是输入^C) |
Exception | 常规错误的基类 |
StopIteration | 迭代器没有更多的值 |
GeneratorExit | 生成器(generator)发生异常来通知退出 |
SystemExit | Python 直译器请求退出 |
StandardError | 所有的内建标准异常的基类 |
ArithmeticError | 所有数值计算错误的基类 |
FloatingPointError | 浮点计算错误 |
OverflowError | 数值运算超出最大限制 |
ZeroDivisionError | 除(或取模)零 (所有资料型别) |
AssertionError | 断言语句失败 |
AttributeError | 物件没有这个属性 |
EOFError | 没有内建输入,到达EOF 标记 |
EnvironmentError | 作业系统错误的基类 |
IOError | 输入/输出操作失败 |
OSError | 作业系统错误 |
WindowsError | 系统呼叫失败 |
ImportError | 汇入模组/物件失败 |
KeyboardInterrupt | 使用者中断执行(通常是输入^C) |
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 | 使用者程序码生成的警告 |
操作方式如下
try:
程序区块......
except 异常名称 as 异常名称别名:
如果上方程序发生指定的异常,则执行此程序区块
范例
try:
# 读取myfile.ext档案
files = open( "./myfile.ext" , mode = "r" , encoding = "utf-8" )
except IOError as e:
# 如果myfile.ext档案不存在,就会触发IO错误,执行以下区块
print(e)
print("档案不存在")
还有捕捉多重错误的方式
try:
程序区块......
except (异常名称1,异常名称2) as 异常名称别名A:
如果上方程序发生指定的异常,则执行此程序区块
except (异常名称3,异常名称4) as 异常名称别名B:
如果上方程序发生指定的异常,则执行此程序区块
另外再来题一下try...except...else...finally...叙述,else...finally...并不是绝对必要的叙述,else
区块在try
区块正常的执行完成後会执行,也就是说没有发生异常才会执行,finally
区块就是无论如何最终一定会执行,操作如下
try:
程序区块......
except (异常名称1,异常名称2) as 异常名称别名A:
如果上方程序发生指定的异常,则执行此程序区块
except (异常名称3,异常名称4) as 异常名称别名B:
如果上方程序发生指定的异常,则执行此程序区块
...如果有需要可以继续增加except区块
else:
try区块顺利执行完毕,没有发生任何错误时执行
finally:
无论如何最後都会执行
今天是30天程序语言研究的第十一天,研究的语言一样是python,今天主要学习的是问答程序 网址:h...
「请问近期有相关资安事件吗?」 「没~有~」 「那请问你们怎麽确认没有资安事件?」 「因为我们没有收...
按钮 ( Button ) 执行 [ GameObject > UI > Button ...
前言 先说这是新手纪录流程,最近想研究一下树莓派当作开发板的使用情境。 於是开始了这个纪录文章,想说...
人工智慧与资料分析专题 今日上午助教报告了一篇论文,并提供程序码和资料集让我们实际run看看,下午就...