Обработка набора файлов из исходного каталога в целевой каталог в Python - PullRequest
2 голосов
/ 07 апреля 2010

Будучи совершенно новым в Python, я пытаюсь запустить команду над набором файлов в Python. Команде требуется как исходный, так и целевой файл (на самом деле я использую imagemagick convert, как в примере ниже).

Я могу предоставить как исходные, так и целевые каталоги, однако не могу понять, как легко сохранить структуру каталогов из исходного в целевой каталог.

например. скажем, srcdir содержит следующее:

srcdir/
   file1
   file3
   dir1/
       file1
       file2

Затем я хочу, чтобы программа создала следующие файлы назначения на destdir: destdir/file1, destdir/file3, destdir/dir1/file1 и destdir/dir1/file2

Пока вот что я придумал:

import os
from subprocess import call

srcdir = os.curdir # just use the current directory
destdir = 'path/to/destination'

for root, dirs, files in os.walk(srcdir):
    for filename in files:
        sourceFile = os.path.join(root, filename)
        destFile = '???'
        cmd = "convert %s -resize 50%% %s" % (sourceFile, destFile)
        call(cmd, shell=True)

Метод walk напрямую не указывает, в каком каталоге находится файл srcdir, кроме конкатенации строки корневого каталога с именем файла. Есть ли какой-нибудь простой способ получить файл назначения, или мне нужно выполнить некоторые операции со строками, чтобы сделать это?

Ответы [ 3 ]

2 голосов
/ 07 апреля 2010

Измените ваш цикл на:

for root, dirs, files in os.walk(srcdir):
    destroot = os.path.join(destdir, root[len(srcdir):])
    for adir in dirs:
        os.makedirs(os.path.join(destroot, adir))
    for filename in files:
        sourceFile = os.path.join(root, filename)
        destFile = os.path.join(destroot, filename)
        processFile(sourceFile, destFile)
1 голос
/ 07 апреля 2010

Существует несколько сценариев относительного пути, которые будут делать то, что вы хотите, а именно найти относительный путь между двумя путями.Например:

К сожалению, я не думаю, что эта функциональность когда-либо была добавлена ​​в основной питон.

0 голосов
/ 07 апреля 2010

Хотя это и не красиво, это сохранит структуру каталогов дерева:

_, _, subdirs = root.partition(srcdir)
destfile = os.path.join(destdir, subdirs[1:], filename)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...