批量搜索并复制文件脚本

Jun 4,2018   1606 words   6 min

Tags: Python

挺久之前就一直在用的脚本了,尤其是在需要批量查找指定类型文件并复制到指定地方时尤其实用,可以节省很多时间。 得益于Python的平台独立性,实现了跨平台开发。 下面直接贴出代码,便于记录学习。

1.代码

# coding=utf-8
import os.path
import sys
import shutil


def findAllFiles(root_dir, filter):
    """
    读取root_dir目录下指定类型文件的路径,返回一个list

    :param root_dir: 文件存放的目录
    :return: 返回两个list,paths为文件的绝对路径,names为文件名
    """

    print("Finding files ends with \'" + filter + "\' ...")
    separator = os.path.sep
    paths = []
    names = []
    # 遍历
    for parent, dirname, filenames in os.walk(root_dir):
        for filename in filenames:
            if filename.endswith(filter):
                paths.append(parent + separator)
                names.append(filename)
    for i in range(paths.__len__()):
        print(paths[i] + names[i])
    print (names.__len__().__str__() + " files have been found.")
    paths.sort()
    names.sort()
    return paths, names


def copyFiles(srcPaths, srcFiles, dstDir):
    for i in range(srcFiles.__len__()):
        shutil.copy(srcPaths[i] + srcFiles[i], dstDir + os.path.sep + srcFiles[i])
        print("Copied " + (i + 1).__str__() + "/" + srcFiles.__len__().__str__())


if sys.argv.__len__() == 2 and sys.argv[1] == "help":
    print("用于批量搜索制定文件并拷贝至指定位置\n")
    print("脚本启动命令格式:")
    print("scriptname.py:[search_dir] [fileType] [dst_dir]")
    print("\n函数帮助:")
    exec ("help(findAllFiles)")
    exec ("help(copyFiles)")
elif sys.argv.__len__() == 4:
    search_dir = sys.argv[1]
    fileType = sys.argv[2]
    dst_dir = sys.argv[3]
    paths, names = findAllFiles(search_dir, fileType)
    if sys.version_info.major < 3:
        flag = raw_input("\nStart copy?y/n\n")
    else:
        flag = input("\nStart copy?y/n\n")
    if flag == 'y':
        copyFiles(paths, names, dst_dir)
    else:
        exit()
else:
    print("Input \"scriptname.py help\" for help information.")

代码也比较简单易懂,有些稍微有技巧的地方都加了注释。 虽然代码简单,但在实际项目中需求很大,所以有时候相比于复杂的技术,能不能抓住实际需求点显得更为重要。 也就像之前花了大力气开发的移动测绘平台几乎无人问津,比较“随便”开发的体重记录器却有很多人用一样,类似的道理。 这里说“随便”是相对于移动测绘平台而言,几乎没有用到什么高深的技术,只是用到了SQLite数据库而已。

本文作者原创,未经许可不得转载,谢谢配合

返回顶部