【问题标题】:How to create folders and move files based on file name [closed]如何根据文件名创建文件夹和移动文件[关闭]
【发布时间】:2013-06-01 03:24:44
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: python cinema-4d


    【解决方案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 或类似的东西,并且没有特殊选项。

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

    ..另一方面,

    • 有效
    • 完全跨平台

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

    【讨论】:

      猜你喜欢
      • 2019-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-13
      相关资源
      最近更新 更多