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

'path'変数を出力すると、「/ Users / soundteam / Desktop / PlayGround /TestFolder/」になります。

誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

7

まず、os.path.join()クロスプラットフォームで機能するため、パスパーツを接着するために使用する必要があります。

さらに、os.mkdiros.makedirs(再帰的であるため非常に便利です)などの組み込みコマンドを使用して、フォルダーを作成できます。サブプロセスの作成には費用がかかるため、この場合はお勧めできません。

あなたの例では"destination/filename"、サブプロセスに二重引用符()を渡していますが、これを行う必要はありません。ファイル名またはフォルダー名に空白を使用する場合、端末には二重引用符が必要です。サブプロセスがそれを処理します。

于 2012-08-23T09:00:39.947 に答える
4

二重引用符は必要ありません。subprocessパラメータをプロセスに直接渡すため、シェルによる解析のためにパラメータを準備する必要はありません。また、末尾のスラッシュは必要ありません。os.path.joinを使用してパスコンポーネントを組み合わせる必要があります。

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

編集: @Fabianの答えを受け入れる必要があります。これは、サブプロセスがまったく必要ないことを説明しています(私はそれを知っていました)。

于 2012-08-23T08:57:44.380 に答える