python学习笔记番外:linux文件拷贝程序

python学习笔记番外:linux文件拷贝程序

为什么写这个程序

之前有说过,为了给亲戚从某视频网站批量下载视频我用python写了一个爬虫,经历一番波折后我成功把爬虫布到了家里的树莓派上,然后花了两天两夜从网上下了100G左右的视频,这时候又有一个问题,需要从树莓派连接的移动硬盘把数据转移到我亲戚的移动硬盘,一开始我是把亲戚的移动硬盘连到笔记本上,通过树莓派的smba共享访问然后拷贝,结果发现巨慢,无奈之下只能把亲戚的移动硬盘接到树莓派上,但是用啥方式拷贝呢,shell命令也不是不可以,但一来我这半桶水,这么多批量文件,出现个啥问题真不好排查,二来这两天python写的还算顺手,不如就当练习文件操作了,于是就有了这个python小程序。

  • 需要爬虫或者想了解以下的可以阅读我的这篇博文

  • 想了解如何在树莓派安装python3的可以阅读我这篇博文

程序本体

import os
import shutil
import sys


def copyDir(orignalDir, destDir):
    if not os.path.exists(destDir):
        os.mkdir(destDir)
    # 获取原目录下的文件和目录,进行复制
    orignalDirList = os.listdir(orignalDir)
    if len(orignalDirList) > 0:
        for orignalSubDirName in orignalDirList:
            orignalSubDir = orignalDir+"/"+orignalSubDirName
            if os.path.isdir(orignalSubDir):
                copyDir(orignalSubDir, destDir+"/"+orignalSubDirName)
            else:
                # 文件直接复制
                copyFile(orignalSubDir, destDir+"/"+orignalSubDirName)


def copyFile(orignalFile, destFile):
    if not os.path.exists(destFile):
        sys.stdout.write("开始复制文件"+orignalFile+"到"+destFile+"\r\n")
        #如果遇到文件输出error,跳过
        try:
            shutil.copy(orignalFile, destFile)
        except:
            sys.stdout.write("文件"+destFile+"复制出错,跳过\r\n")
    else:
        sys.stdout.write("已跳过文件"+orignalFile+"\r\n")


orignalDir = "/home/pi/NewmanDisk/haokan"
destDir = "/media/pi/新加卷/围棋教学资源/好看视频"
copyDir(orignalDir, destDir)
sys.stdout.write("复制完毕\r\n")

程序本身很简单,无非就是读取当前目录下的文件和子目录,文件的话直接拷贝,子目录的话就递归调用。

程序缺陷

拷贝过程中遇到input/output error报错,所以有了try/catch,但是对错误处理的相当草率,更合理的方式是将错误输出到一个文件中记录,因为这里是联手性质的一次性程序,所以没有做改进。

posted @ 2021-03-04 14:33  魔芋红茶  阅读(270)  评论(0编辑  收藏  举报