zoukankan      html  css  js  c++  java
  • 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("复制文件失败")

  • 相关阅读:
    bzoj1015星球大战(并查集+离线)
    bzoj1085骑士精神(搜索)
    bzoj1051受欢迎的牛(Tarjan)
    左偏树学习
    hdu1512 Monkey King(并查集,左偏堆)
    左偏树(模板)
    PAT (Basic Level) Practice (中文) 1079 延迟的回文数 (20分) (大数加法)
    PAT (Basic Level) Practice (中文) 1078 字符串压缩与解压 (20分) (字符转数字——栈存放)
    PAT (Basic Level) Practice (中文) 1077 互评成绩计算 (20分) (四舍五入保留整数)
    PAT (Basic Level) Practice (中文) 1076 Wifi密码 (15分)
  • 原文地址:https://www.cnblogs.com/leijing0607/p/7494972.html
Copyright © 2011-2022 走看看