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

 

转载于:https://www.cnblogs.com/leijing0607/p/7494972.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值