python基础——3.文件操作&日志处理
一.文件操作
文件句柄:
f = open("文件绝对路径或相对路径", mode="r", encoding="utf-8")
content = f.read() # 这里进行了一个utf-8到gbk转换?
print(content)
f.close()
# 如果文件隐藏了后缀,则不要添加后缀
# 以什么编码方式存储的文件,就以什么编码方式打开
# 非文字文件存储用bytes
# read()对文件进行了转换, b转换成了str
1.编码方式 utf-8 gbk
2.mode:r,w,a,r+,w+,a+,rb,wb,ab,r+b,w+b,a+b
# r+会覆盖当前文件指针所偶在位置的字符,如原来文件内容是“hello”,打开后写入”hi“,会干掉he
不移动光标,新内容读不出来;移动光标新内容能读出来
在写之前能读旧内容
# w+与r+不同,w+在打开文件时会将文件清空
不移动光标,新内容读不出来;移动光标新内容能读出来
在写之前读不到旧内容,已经被清空
# a+与r+不同,a+只能写到文件末尾(无论当前文件指针在哪里).r+移动光标后就会覆盖写,a+就不会
不移动光标,新内容读不出来;移动光标新内容能读出来
在写之前读不到就内容,因为光标在最尾
3.操作方式 只读 只写 追加 读写 写读
4.open直接打开文件,如果出现异常,则报错,close方法无法关闭
5.用with的好处是达到语句末尾时,会自动关闭文件,即便出现异常.
6.with语句实际上是一个非常通用的结构,使用上下文管理器.支持__enter__和__exit__方法
7.__enter__方法不接受任何参数,在进入with语句时调用,其返回值被赋给关键字as后面变量
8.__exit__方法接收三个参数,异常类型,异常对象和异常跟踪.它在离开方法时被调用,如果__exit__返回false,将抑制所有的异常.
9.文件也可用做上下文管理器.他们的方法__enter__返回文件对象本身,而方法__exit__关闭文件
10.with语句作用效果相当于try-except-finally
# 功能详解
f.read(3) # 读取前三个字符
f.seek(3) # 移动光标,以字节为单位.如果文本是中文,不是3倍数会报错
# seek(0)开头;seek(0, 2)结尾
f.tell() # 获取光标的位置,按字符计算
count = f.tell()
f.seek(count-9) # 意思是从获取的位置的-3开始
f.readlines() # 输出的是列表,每一行是列表中的一个元素
f.truncate() # 截取文件,截取几位括号里加几
# 方法2:移动光标,然后f.truncate(),光标后边都删除
# 注意,需要用到写操作,意味着会删除源文件内容
writeable() # 是否可写
readable() # 是否可读
r # 非文字文件用rb打开
f = open("filename", mode="rb")
content = f.read()
f.close()
w
对于写,没有文件则创建文件,有文件先清除源文件再写
f = open("filename", mode="w", encoding="utf-8")
f.write("123")
f.close()
f = open("filename", mode="wb")
f.write("浮点数".encode("utf-8"))
f.close()
f = open("filename", mode="wb", encoding="utf-8")
f.write("123")
f.close() # 这两种方法结果相同,目前用encoding会报错
a # a没有读功能,读会报错,a+能读
f = open("filename", mode="a", encoding="utf-8")
f.write("123")
f.close() # 追加写入
r+
f = open("filename", mode="r+", encoding="utf-8")
print(f.read())
f.write("123")
print(f.read()) # 新内容不会读出来
f.close()
f = open("filename", mode = "r+b")
print(f.read())
f.write("123", encode("utf-8"))
with open("filename", mode="r", encoding="utf-8") as obj:
with open("filename1", mode="r", encoding="utf-8") as obj1:
print(obj.read())
# 可以打开多个文件