如何根据文件名创建文件夹和移动文件

时间:2013-06-01 03:24:44

标签: python cinema-4d

我正在学习Python,并且正在学习Codeacademy的课程,但需要尽快使用特定的脚本。

基本上,我正在寻找一种可以在Mac和PC上部署的工具,可以执行以下操作:

  • 阅读源目录
  • 从用户
  • 接收关键字列表
  • 在文件名中搜索这些关键字
  • 如果在文件名中找到关键字,请创建一个文件夹,其中包含关键字作为标题,并将带有关键字的所有文件移动到目标文件夹中。

此工具将与Cinema4D一起使用,Cinema4D是一种常见的3D图形包。默认情况下,它将所有帧渲染到一个目录,但是当它们放入自己的文件夹时,通常更容易使用各种输出。

查看this .zip文件。它包含一些可以作为试验台的.tif文件。理想情况下,此脚本可以输出名为“RGBA”“Object_01”等的单独文件夹。

在您的帮助下,我想将此工具用于我自己以及整个Cinema4D社区(我会给你信任)。我已经尝试使用this脚本,但无法移动文件。我只能创建文件夹,尽管很笨拙。

1 个答案:

答案 0 :(得分:1)

我鞭打了它,交叉发布了它,从那个问题中删除了它,并在这里重新发布,一切都为了你。 :-)这需要'path.py'模块 - pip install path.pyeasy_install path.py,然后它应该运行。 .. 应该运行,因为它使用操作系统无关的方法 - 但我没有在Windows上试过它。 Pip(及其要求,分发)可以从here下载并安装。

#! /usr/bin/python
# -*- coding: utf8 -*-

import os, sys
from path import path



def main(args):
    folder, keyword = path(args[0]), args[1]

    if not folder.exists() and folder.isdir():
        print str(folder) + " is not a valid folder path."
        exit(1)
    targets = []
    for fpath in folder.files():
        if keyword.lower() in fpath.basename().lower():
            targets.append(fpath)
    if targets:
        new_dir = folder / keyword
        new_dir.makedirs_p()
        if new_dir.exists() and new_dir.isdir():
            for fpath in targets:
                dest = new_dir / fpath.basename()
                print "moving {} to {}".format(str(fpath), dest)  
                fpath.move(new_dir)
    else:
        msg = "No files in {} match the keyword {}."
        print msg.format(repr(str(folder)), repr(keyword))

if __name__ == "__main__":
    args = sys.argv[1:]
    help = ('-h', '--help', '/h', '/help', '/?')
    if len(args) != 2 or args[0] in help or args[1] in help:
        print "Moves files in <path> whose name matches <keyword> into a"
        print "subdirectory of <path> named <keyword>"
        print "Usage:"
        print "{} <path> <keyword>".format(sys.argv[0])
        exit(0)
    try:
        main(args)
    except OSError, err:
        print "Failed: " + err.strerror

..这是非常快速和肮脏的,并没有太多的帮助,不使用argparse或类似的东西,它没有特殊的选项。

  • 仅处理文件
  • 它没有递归
  • 它有非常糟糕的基本错误报告。
  • 请注意,标签会以不区分大小写的方式匹配文件。

..另一方面,

  • 工作
  • 这是完全跨平台的

..如果你在我第一次发布它时抓住它,你可能想再次这样做,因为我已经更新了一点(更好的错误报告和处理)