#7 Python进阶教学4

IO

今天要介绍常见的IO操作,流程:开档 >> 处理 >> 关档,下面来讲解一些Python中的档案读写方法

# 开档
放档案的变数 = open( "档案路径" , mode = "开启的模式" , encoding = "编码格式" )

开启的模式有下列几种

  • r:读取模式,读取存在的档案
  • w:写入模式,新建档案写入,如果档案原本就存在,就清空
  • a:资料加到旧档案後面
  • r+:读写模式,读取档案并写入
  • w+:清空档案内容,新写入的东西可在读出,若档案不存在,会自行新建
  • a+:资料加到旧档案後面,可读取资料
  • b:读取二进位档模式
    中文常用的编码格式为"utf-8",如果没设定的话,档案内若有中文,很容易出错
    档案的操作如下
# 开档
放档案的变数 = open( 档案路径 , mode = "开启的模式" , encoding = "编码格式" )

#读取全部文字
变数 = 放档案的变数.read()

#一行一行的读取文字
for 变数 in 放档案的变数:
	将文字从 放档案的变数 一行一行的放入 变数 中
    
#写入档案
放档案的变数.write(字串)

#关闭档案
放档案的变数.close()

而上面这种写法虽然没有问题,但缺点就是必须手动加入关闭档案的程序码,不是很方便,也很容易忘记,除了以上的方法,比较常见的是with关键字,在程序中对於档案和资源的管理是非常重要的,开启外部的档案要是没有被关闭,它就会一直占据着记忆体,而with关键字可让我们更容易管理这些开启的资源,在with区块之下,python 程序会自动进行资源的建立、清理与回收动作,这样的好处是with区块执行完毕会自动安全的关闭档案,with不仅可以用来开档,也能用来开网页,使用方式如下

with open( 档案路径 , mode = "开启的模式" , encoding = "编码格式" ) as 变数:
	读取或写档的程序区块
	此区块执行完毕会自动的关闭档案

例外处理 try...except...

将可能会出错的程序码放在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:
    无论如何最後都会执行

<<:  [Day 21] 针对API的单元测试(一)

>>:  企划实现(7)

30天程序语言研究

今天是30天程序语言研究的第十一天,研究的语言一样是python,今天主要学习的是问答程序 网址:h...

[Day28]ISO 27001 附录 A.16 资讯安全事故管理

「请问近期有相关资安事件吗?」 「没~有~」 「那请问你们怎麽确认没有资安事件?」 「因为我们没有收...

Unity - 互动功能(终章)

按钮 ( Button ) 执行 [ GameObject > UI > Button ...

Build OpenWRT於Raspberry Pi4

前言 先说这是新手纪录流程,最近想研究一下树莓派当作开发板的使用情境。 於是开始了这个纪录文章,想说...

Day10 职训(机器学习与资料分析工程师培训班): 专题讨论

人工智慧与资料分析专题 今日上午助教报告了一篇论文,并提供程序码和资料集让我们实际run看看,下午就...