python第六篇:Python复制超大文件、复制二进制文件

Python文件复制

# 写程序实现复制文件的功能
# 要求:
#     1. 源文件路径和目标文件路径需要手动输入
#     2. 要考虑文件关闭的问题
#     3. 要考虑复制超大文件的问题
#     4. 要能复制二进制文件

def copy_file():
    '''
    此函数实现文件复制功能
    source_dir:源文件路径
    target_dir:目标文件路径
    '''
    source_dir = input("请输入源文件路径:")
    target_dir = input("请输入目标文件路径:")
    try:
        f = open(source_dir,'rb')
        try:
            try:
                f2 = open(target_dir,'wb')
                # 可能突然断电或者U盘被拔出了
                try:
                    for i in f:
                        f2.write(i)
                    f.close()
                    f2.close()
                finally:
                    f2.close()
            except OSError:
                print("打开写文件失败")
                return False
        finally:
            f.close()
    except OSError:
        print("打开读文件失败")
        return False

copy_file()

 

 下面的是改良之后的版本,避免过多次数的进行磁盘操作

 

#   1. 写程序实现复制文件功能:
#      要求:
#        1. 源文件路径和目标文件路径需手动输入
#        2. 要考虑关闭文件问题
#        3. 要考虑复制超大文件问题
#        4. 要能复制二进制文件


def mycopy(src_file, dst_file):
    """此函数的功以实现复制文件
    src_file : 源文件名
    dst_file : 目标文件名
    """
    try:
        fr = open(src_file, "rb")  # fr读文件
        try:
            try:
                fw = open(dst_file, 'wb')  # fw写文件
                try:
                    while True:
                        data = fr.read(4096)
                        if not data:
                            break
                        fw.write(data)
                except:
                    print("可能U盘被拔出...")
                finally:
                    fw.close()  # 关闭写文件
            except OSError:
                print("打开写文件失败")
                return False
        finally:
            fr.close()  # 关闭读文件
    except OSError:
        print("打开读文件失败")
        return False
    return True

s = input("请输入源文件路径名: ")
d = input("请输入目标文件路径名: ")
if mycopy(s, d):
    print("复制文件成功")
else:
    print("复制文件失败")

 

下面是with语句改写后的代码:

 

#   1. 写程序实现复制文件功能:
#      要求:
#        1. 源文件路径和目标文件路径需手动输入
#        2. 要考虑关闭文件问题
#        3. 要考虑复制超大文件问题
#        4. 要能复制二进制文件


def mycopy(src_file, dst_file):
    """此函数的功以实现复制文件
    src_file : 源文件名
    dst_file : 目标文件名
    """
    try:
        with open(src_file, "rb") as fr,open(dst_file, 'wb') as fw:  # fr读文件
            while True:
                data = fr.read(4096)
                if not data:
                    break
                fw.write(data)
    except OSError:
        print("打开读文件失败")
        return False
    except:
        print("可能U盘被拔出...")
    return True

s = input("请输入源文件路径名: ")
d = input("请输入目标文件路径名: ")
if mycopy(s, d):
    print("复制文件成功")
else:
    print("复制文件失败")

 

posted @ 2017-09-08 15:43  风起了,风停了  阅读(20041)  评论(0编辑  收藏  举报