概述
复制文件是操作系统最常用的功能之一,在python编码中有时也会用到复制文件,我们要明白复制文件的功能实现。
原理
复制文件就是一边从 源文件读内容,一边 将内容写入目标文件。
用哪种模式打开文件
模式主要有两种,一种是文本文件模式,一种是二进制文件模式。
在复制文件时,可能复制的是txt文件,即文本文件,也可能复制的是mp3,rmvb等媒体文件,也可能复制exe可执行的文件,所以要用 二进制模式 打开文件
读取文件
复制文件时可能会复制上Gb的rmvb这类 大型 媒体文件,所以要注意,不要将文件 全部读取 到内存,这样可能会报内存溢出错误
设置一个固定 长度,每次只读取这个 长度 的数据,同时写入到目标文件中
异常处理
编码时要注意处理错误、异常
编码
import datetime
'''
设置读取的长度
要测试哪个长度的复制速度最快
'''
buf_len=1024*1024
def copyfile(source,targe):
stime=datetime.datetime.now()
with open(source,'rb') as fs,open(targe,'wb') as ft:
index=0
while True:
data=fs.read(buf_len)
if data:
ft.write(data)
index+=1
else:
break
etime=datetime.datetime.now()
total_seconds=(etime-stime).total_seconds()
print('缓存:%d,耗时:%f,循环:%d次'%(buf_len,total_seconds,index))
return total_seconds
count_sen=0
index=0
for item in range(10):
# total_seconds=copyfile(r'c:/users/mym/desktop/阳光电影www.ygdy8.com.铁血战士.HD.720p.韩版中字.mkv',r'c:/users/mym/desktop/阳光电影www.ygdy8.com.铁血战士.HD.720p.韩版中字2.mkv')
total_seconds=copyfile(r'c:/users/mym/desktop/6.txt',r'c:/users/mym/desktop/6-1.txt')
count_sen+=total_seconds
index+=1
print(count_sen/index)
性能测试
编码后要做性能测试,设置的固定长度,
读取上Gb的文件,测试固定长度设置为多少时,速度最快,同时要考虑内存大小
读取小文件,以上面的长度读取时,观察其读取速度
发布
发布程序时将所有测试代码、无用代码全部删除掉
下面这篇文章有各种复制文件的实现
https://www.cnblogs.com/leijing0607/p/9708454.html