其他分享
首页 > 其他分享> > 温故而知新--day3

温故而知新--day3

作者:互联网

温故而知新--day3

文件操作

在python对文件操作用的是open函数,其一般使用形式是f = open(file, encoding,mode)file是文件路径,encoding是文件编码,mode是打开文件的模式,f称为文件句柄。
一般的文件编码有:

默认以操作系统的编码方式打开

打开文件的模式有:

模式符号
r
w
追加a
字节形式b
文本形式t
更新(可读可写)+

默认mode="rt"

读取文件的方法有一下几个:

一些与读取相关的方法:

假如有这样一个文件(./test.txt):

test file line1
test file line2
test file line3

使用open例子:

f = open("./test.txt", mode="r", encoding="utf-8")


print(f.readable())     # True
print(f.read())
print(f.tell())     # 49 # 查看光标位置

f.seek(0)  # 把光标放到开头位置

print(repr(f.readline()))         # 'test file line1\n'
print(f.readlines())        # ['test file line2\n', 'test file line3']
f.close()       # 关闭文件
print(f.closed)     # True

直接用open操作文件时,不要忘了使用close()方法关闭文件

seek补充
seek方法有三种模式,用第二个参数的值确定。

注意:非默认模式(12)时,Python 要求文件必须要以二进制格式(b)打开,否则会抛出io.UnsupportedOperation错误。
例子

# test.txt有44个字符

f = open("./test.txt", mode="rb")
f.seek(10, 0)       # 默认形式,以绝对位置
print(f.tell())     # 10
f.seek(10, 1)       # 相对位置,往前移10个字符
print(f.tell())     # 20
f.seek(-10, 2)      # 从文件尾部开始移动,注意数值是负数的
print(f.tell())     # 34
f.close()

使用写的方法会把原文件清空然后重新写入,同样先列出其相关方法:

例子:

f = open("./test.txt", mode="w", encoding='utf-8')

print(f.writable())

f.write("new line1\n")
f.writelines(["new line2\n", "new line3\n"])
f.close()

写的时候写入字符串或字节类型(根据mode参数而定)

f = open("./test.txt", mode="w",  encoding='utf-8')

f.write("new line1\n")
f.close()


# 字节方式
f = open("./test.txt", mode="bw")
f.write("new line2\n".encode('utf-8'))

f.close()

追加

追加,即在原文件的尾部写入。

f = open("./test.txt", mode="a",  encoding='utf-8')

print(f.tell())     # 33 # 在最后
f.write("new line4\n")
f.close()

open与with

open支持上下文管理协议,即可以与with函数结合使用,使用with函数,我们就不需要在最后使用close()方法,手动将文件关闭了。

with open("./test.txt", "r", encoding='utf-8') as f:
    print(f.read())

异常处理

python使用try-except-else-finally的形式处理异常,一般来说,常用的格式是try-excepttry中写正常的逻辑代码,而except中写处理异常的代码。else表示try中代码不出错时执行;finally中的代码不管出不出错多执行,可以在这里写释放资源等的代码。

使用例子

例子一:

try:
    print(1234)
    raise Exception("手动触发的异常")
except Exception as e:
    print(e)        # 手动触发的异常
finally:
    print("finally执行了")

例子二:

try:
    print(1234)
    #raise Exception("手动触发的异常")
except Exception as e:
    print(e)        # 手动触发的异常
else:
    print("正常执行了")
finally:
    print("finally执行了")

自定义异常类

在python内部有一些内置的异常类,一般来说我们可以直接使用他们,假如是特殊的情况,我们可以继承其中一个类,自己自定义异常类。

 

常见异常类
常见异常类

 

自定义异常类例子:

class NumError(ValueError):
    """输入小于0参数的异常类"""
    def __init__(self, num):
        # 写你需要的参数
        self.num = num

    def __str__(self):
        # 描述信息
        return "数值不能小于0,你输入的数值为%d" % self.num


def test(num):
    if num > 0:
        print("processing ....")
    else:
        raise NumError(num)		# 手动抛出异常


def main():
    test(2)
    test(-1)       # __main__.NumError: 数值不能小于0,你输入的数值为0


if __name__ == '__main__':
    main()

我的github
我的博客
我的笔记

标签:温故而知新,文件,--,day3,test,mode,__,print,open
来源: https://blog.csdn.net/qq_45533884/article/details/116902346