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("复制文件失败")

  • 相关阅读:
    POJ 2752 Seek the Name, Seek the Fame
    POJ 2406 Power Strings
    对闭包的理解(closure)
    HDU
    Python字典遍历的几种方法
    面向对象的六大原则
    Android添加代码检查权限
    Android请求网络权限
    android广播接收器BroadcastReceiver
    Android中SQLite下 Cursor的使用。
  • 原文地址:https://www.cnblogs.com/leijing0607/p/7494972.html
Copyright © 2011-2022 走看看