Python-код для сортировки файлов по папкам - PullRequest
2 голосов
/ 22 января 2009

Python 2.5.1

http://www.cgsecurity.org/wiki/After_Using_PhotoRec

Я только что запустил PhotoRec, и код, данный как способ сортировки типов файлов в их собственную папку, возвращается с этой ошибкой. Любые предложения о том, как изменить? Спасибо:

[EDIT2: две точки:

  1. Этот вопрос был отклонен, потому что это было «использование» кода, почему-то не вопрос программирования. Это квалифицируется как вопрос кодирования? Я утверждаю, да.
  2. Я вернулся и отредактировал страницу, с которой пришел код, чтобы прояснить необходимость параметров в интересах других.]

    gyaresu $ python recovery.py Traceback (последний вызов был последним): Файл "recovery.py", строка 8, в source = sys.argv [1] IndexError: индекс списка вне диапазона

Сценарий:

#!/usr/bin/env python
import os
import os.path
import shutil
import string
import sys

source = sys.argv[1]
destination = sys.argv[2]

while os.path.exists(source) != True:
    source = raw_input('Enter a valid source directory\n')
while os.path.exists(destination) != True:
    destination = raw_input('Enter a valid destination directory\n')

for root, dirs, files in os.walk(source, topdown=False):
    for file in files:
        extension = string.upper(os.path.splitext(file)[1][1:])
        destinationPath = os.path.join(destination,extension)

        if os.path.exists(destinationPath) != True:
            os.mkdir(destinationPath)
        if os.path.exists(os.path.join(destinationPath,file)):
            print 'WARNING: this file was not copied :' + os.path.join(root,file)
        else:
            shutil.copy2(os.path.join(root,file), destinationPath)

Ответы [ 3 ]

2 голосов
/ 22 января 2009

Или вы можете изменить оригинальный скрипт и добавить

if len(sys.argv) != 3:
    print "Require 2 arguments: %s <source> <destination>" %(sys.argv[0])
    sys.exit(1)

после операторов импорта для правильной обработки ошибок.

2 голосов
/ 22 января 2009

Это просто означает, что программа ожидает два аргумента командной строки: источник и пункт назначения. Если вы хотите использовать тот же код в другой функции, замените sys.argv [1] и [2] на ваши собственные переменные.

0 голосов
/ 22 января 2009

Поскольку скрипт будет запрашивать пути, если они не существуют, вы можете сделать аргументы программы необязательными.

Изменение

source = sys.argv[1]
destination = sys.argv[2]

до

source = sys.argv[1] if len(sys.argv > 1) else ""
destination = sys.argv[2] if len(sys.argv > 2) else ""
...