Python 备份文件,以及备份大文件

今天分享一个很有用的小代码~

就是关于文件的备份

import os  #导入os模块

ori_file_name = r'E:\PYTHON\mayday.mp3'  #输入文件路径

if os.path.isfile(ori_file_name):   #判断该路径的是否是文件
    #截取文件名,重组文件名
    seek_num = ori_file_name.rfind('.')
    new_file_name =ori_file_name[:seek_num]+'_copy'+ori_file_name[seek_num:]
    #打开源文件
    old_file = open(ori_file_name,'rb')
    #读取文件信息
    old_file_content = old_file.read()
    #创建新文件
    new_file = open(new_file_name,'wb')
    #将原始文件信息写入
    new_file.write(old_file_content)
    #关闭文件
    old_file.close()
    new_file.close()
else:
    print('没有该文件')

好,这个代码就满足一般文件的copy了,

但是,如果遇到大文件,在读取文件信息的时候内存扛不住得话应该怎么办

emmmmm.....那肯定再买一条64G的内存啊!!!!

开个玩笑。我们下面对代码进行改良,可达到省下一个内存条的钱的效果

import os  # 导入os模块

ori_file_name = r'D:\大文件.rmvb'  # 输入文件路径
if os.path.isfile(ori_file_name):  # 判断该路径的是否是文件
    # 截取文件名,重组文件名
    seek_num = ori_file_name.rfind('.')
    new_file_name = ori_file_name[:seek_num] + '_copy' + ori_file_name[seek_num:]
    # 打开源文件
    old_file = open(ori_file_name, 'rb')
    # 创建新文件
    new_file = open(new_file_name, 'ab')
    # 读取文件信息,这部会在后面解释
    # for i in old_file:
    #     if not i:
    #         break
        new_file.write(i)
    new_file.write(old_file.read())
    # 关闭文件
    old_file.close()
    new_file.close()
else:
    print('没有该文件')

关于那个for循环,

最早的时候,我想的是用  for i in old_file.readlines(),后来发现,依然崩溃了,因为在使用readlines读取文件时,系统会吧该文件整个文件转换成一个列表,而这个列表会占用内存,所以虽然能剩去写入时的内存,但是依然会浪费大部分资源。

后来我试试了如下代码: print(isinstance(old_file,Iterable)) ==>True  即old_file是可以迭代的,那么,old_file的对象是源文件,且这里没有对他在进行分解,所以在迭代old_file的时候不会占用空间,所以这样就只会在写入时候占用内存了以达到拷贝的效果。

以上是本人的见解,不知道是否有不对的地方,还希望有看到的大神帮忙指出~~

猜你喜欢

转载自blog.csdn.net/Watson_Ashin/article/details/81370112