应用:
1.文件上传
2.保存log
系统函数:
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True):
file:文件名
mode:默认‘r’
常用模式如下:
r:read 读 --------->纯文本文件
w:write 写--------->纯文本文件
b:binary 二进制,字节
rb:read binary--------->纯文本/图片/音乐/影像
wb:write binary--------->纯文本/图片/音乐/影像
buffering:缓存,类似运行内存,越大速度越快
工作原理分析:
文件上传:(读)电影上传(写)到网盘
文件下载:从(读)网盘上下载(写)到我的硬盘上
文档说明:
在函数中打一个三引号 "" "",会默认产生两个值,如下:
:param n: # 说明参数n是干嘛的
:return: # 有没有返回值
读文件操作:
stream = open(path/filename,'r') # 返回值:stream(管道)
stream.read() # 读取管道中全部内容
stream.readable() # 判断是否可以读取 返回值:True/False
stream.readline() # 读取一行内容
stream.readlines() # 读取多行,并返回在列表中
注意:
1.如果传递的path/filename有误,则会报错:FileNotFoundError
2.如果是图片则不能使用默认的读取方式,mode需要改为'rb'
写文件操作:
stream = open(path/filename,'w') # 返回值:stream(管道)
stream.write(s) # 每次都会将原文件的内容清空,然后再写当前的内容,没有换行效果,如需要,自己添加\n
stream.writelines(Iterable) # 可迭代的,没有换行效果,如需要,自己添加\n
追加文件操作:
stream = open(path/filename,'a') # 模式'a',不会清空原来文件的内容,再原来基础上追加内容,相同于append效果
stream.write(s)
释放(管道)资源
stream.close()
标准的一次文件操作:
开始:open()
结束:close()
文件的复制:
1.在同目录下复制文件:
'''
原文件:c:\old.jpg
目标文件:c:\new.jpg
with结果open使用,可以帮助我们自动释放资源
'''
with open(r'c:old.jpg','rb') as rstream: # 等同于 stream = open(r'c:old.jpg','rb')
container = rstream.read() # 读取文件内容
with open(r'c:new.jpg','wb') as wstream:
wstream.write(container)
print("文件复制完成!")
2.将其他目录的文件复制到当前目录下:
思路:1.进入要复制的目录
2.读取原文件内容
3.获取当前目录路径以及原原文件的名字
4.拼接新文件路径
5.写入文件
import os
with open(oldpath/filename,'rb') as rstream:
container = rstream.read() # 读取原文件内容
# 获取当前目录路径(绝对路径)
nowpath = os.path.dirname(__file__)
# 获取原文件的名字
oldfilepath = restream.name
oldfilename = oldfilepath[oldfilepath.rfind('\\')+1:]
# 拼接新文件路径
newfilepath = os.path.join(nowpath,oldfilename)
# 写入文件
with open(newfilepath,'wb') as wstream:
wstream.write(container)
print('文件复制完成!')