在Python中处理从源目录到目标目录的一组文件

时间:2010-04-07 14:45:52

标签: python path

在python中全新我试图在python中的一组文件上运行命令。该命令需要源文件和目标文件(我实际上正在使用imagemagick convert,如下例所示。)

我可以提供源目录和目标目录,但是我无法弄清楚如何轻松地保留从源目录到目标目录的目录结构。

E.g。说srcdir包含以下内容:

srcdir/
   file1
   file3
   dir1/
       file1
       file2

然后我希望程序在destdir上创建以下目标文件:destdir/file1destdir/file3destdir/dir1/file1destdir/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 个答案:

答案 0 :(得分:2)

将您的循环更改为:

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 :(得分:1)

有一些相对路径脚本会做你想要的 - 即找到两条路径之间的相对路径。 E.g:

不幸的是,我不认为这个功能曾经被添加到核心python中。

答案 2 :(得分:0)

虽然不漂亮,但这将保留树的目录结构:

_, _, subdirs = root.partition(srcdir)
destfile = os.path.join(destdir, subdirs[1:], filename)