2013-06-01 3 views
1

Я изучаю Python, и я прохожу курс по Codeacademy, но вам нужен конкретный скрипт как можно скорее.Как создавать папки и перемещать файлы на основе имени файла

По существу, я ищу инструмент, который я могу развернуть как на Mac и PC, которые могут сделать следующее:

  • Читать исходный каталог
  • Получить список ключевых слов от пользователя
  • Поиск этих ключевых слов в именах файлов
  • Если ключевое слово найдено в имени файла, создайте в нем папку с ключевым словом и переместите все файлы с ключевым словом в папки назначения.

Этот инструмент предназначен для использования в Cinema4D, общем 3D-графическом пакете. По умолчанию он отображает все свои фреймы в один каталог, но часто бывает проще работать с различными выходами, когда они помещаются в их собственные папки.

Посмотрите на this .zip файл. Он содержит несколько файлов .tif, которые могут служить тестовой кроватью. В идеале этот скрипт может выводить отдельные папки под названием «RGBA» «Object_01» и т. Д.

С вашей помощью я хотел бы сделать этот инструмент как для собственного использования, так и для всего сообщества Cinema4D (я дам вам кредит). Я уже пытался использовать сценарий this, но не могу заставить файлы перемещаться. Я могу получить только созданные папки, хотя и неуклюже.

ответ

1

Я взломал это, перекрестил его, удалил из этого вопроса и повторно разместил его здесь, все для вас. :-) Для этого требуется модуль path.py - pip install path.py или easy_install path.py, а затем он должен работать. .. должен действительно работает, потому что он использует агностические методы OS - , но я не пробовал это на Windows . Пип (и его требование, распространение) можно загрузить и установить с 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 или что-нибудь подобное, и он не имеет каких-либо специальных опций.

  • он обрабатывает файлы только
  • не рекурсию
  • он имеет довольно штопать отчетности основной ошибки.
  • Помните, что теги соответствуют файлам без учета регистра.

..on другой стороны,

  • Он работает
  • Это полностью кросс-платформенный

..если ты схватил это, когда я первый отправил его, вы можете сделать это снова, так как я немного обновил его (более эффективная отчетность и обработка ошибок)

Смежные вопросы