0

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

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

  • 读取源目录
  • 接收来自用户的关键字列表
  • 在文件名中搜索这些关键字
  • 如果在文件名中找到关键字,则以该关键字为标题创建一个文件夹,并将所有带有该关键字的文件移动到目标文件夹中。

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

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

在您的帮助下,我想制作这个工具供我自己以及整个 Cinema4D 社区使用(我会给你功劳)。我已经尝试过使用这个脚本,但无法移动文件。我只能创建文件夹,尽管很笨拙。

4

1 回答 1

2

我把它翻了出来,交叉发布,从那个问题中删除,然后在这里重新发布,一切都是为了你。:-) 这需要“path.py”模块——pip install path.py或者easy_install path.py,然后它应该运行。..应该运行,因为它使用与操作系统无关的方法——但我没有在 Windows 上尝试过。Pip(及其要求,分发)可以从这里下载和安装。

#! /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 或类似的东西,并且没有特殊选项。

  • 它只处理文件
  • 它不递归
  • 它有相当基本的错误报告。
  • 请注意,标签以不区分大小写的方式匹配文件。

..另一方面,

  • 有用
  • 它是完全跨平台的

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

于 2013-06-01T05:02:42.960 回答