在python中全新我试图在python中的一组文件上运行命令。该命令需要源文件和目标文件(我实际上正在使用imagemagick convert
,如下例所示。)
我可以提供源目录和目标目录,但是我无法弄清楚如何轻松地保留从源目录到目标目录的目录结构。
E.g。说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
下的目录。是否有一些简单的方法来获取目标文件,或者我是否必须执行一些字符串操作才能执行此操作?
答案 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)