0

因此,我想创建一个简单的脚本来根据某个文件夹中包含的文件名创建目录。

我的方法如下所示:

def make_new_folders(filenames, destination):
    """
    Take a list of presets and create new directories using mkdir
    """
    for filename in filenames:
        path = '"%s/%s/"' %  (destination, filename)
        subprocess.call(["mkdir", path])

由于某种原因,我无法让命令工作。

如果我传入一个名为“测试文件夹”的文件,我会收到一个错误,例如:

mkdir: "/Users/soundteam/Desktop/PlayGround/Test Folder: No such file or directory

打印“路径”变量会导致:“/Users/soundteam/Desktop/PlayGround/Test Folder/”

谁能指出我正确的方向?

4

2 回答 2

7

首先,您应该使用os.path.join()将路径部分粘合在一起,因为它可以跨平台工作。

此外,还有内置命令,如os.mkdiros.makedirs(这真的很酷,因为它是递归的)来创建文件夹。创建子流程的成本很高,在这种情况下,这不是一个好主意。

在您的示例中,您将双引号 ( "destination/filename") 传递给子进程,而您不必这样做。如果您在文件或文件夹名称中使用空格,终端需要双引号,子进程会为您处理。

于 2012-08-23T09:00:39.947 回答
4

你不需要双引号。subprocess将参数直接传递给进程,因此您无需准备它们以供 shell 解析。您也不需要尾部斜杠,并且应该使用 os.path.join 来组合路径组件:

path = os.path.join(destination, filename)

编辑:您应该接受@Fabian 的回答,这说明您根本不需要子流程(我知道)。

于 2012-08-23T08:57:44.380 回答