1

私はこれらの2つに悪い問題を抱えていました:Windowsの「\」と「/」、明らかに:\

/内のすべての\オカレンスを置き換える必要があるため、たとえばこの「\ 6」では機能しないため、replace()を使用できます。

私がしなければならないこと?mkdir()を「のみ」使用して、フォルダーの構造(ファイルなし)をある場所から別の場所に複製したい。したがって、私は主にos.walk()とmkdir()を使用します。numeberという名前のフォルダーが見つかるまで、すべてが正常に機能します。実際、mkdirはこれを行うことができます:

mkdir( "C:\ folder")およびmkdir( "C:\ newfolder")ですが、たとえばmkdir( "C:/ 6")ではありません。

ただし、バックスラッシュではなくスラッシュを使用してパスを渡す方法がわかりません。これは、前述したように、パスを手動で記述せず、os.walk()の「dirname」から取得したためです。

os.path.normcaseとos.path.normpathが存在することは知っていますが、これらはスラッシュを円記号に変換します。

フォルダの構造を複製するために「のみ」が必要ですが、残念ながら、多くのフォルダには番号が付けられています。

どうもありがとうございます

PS:パスは例のように単純ではありません...より現実的な例は「D:\ main \ folder \ blue \ sky\34」です。

4

3 に答える 3

3

os.pathを使用してパスを作成すると、プラットフォームに依存せず、これらの問題を回避できます。

例えば、mkdir(os.path.join(r"C:\", "6"))

またos.path.join(r"D:\", "main", "folder", "red", "34")

于 2011-01-07T00:31:14.027 に答える
1

バックスラッシュは、Python 文字列リテラルのエスケープ文字です。文字列で実際にリテラル バックスラッシュを使用するには、バックスラッシュをバックスラッシュでエスケープする必要があります。

例:

foo = "c:\\bar"

数字を使用したフォルダー名の問題は、Python がバックスラッシュの後に有効な 8 進数を文字コード = その 8 進数の文字として解釈することです。http://docs.python.org/reference/lexical_analysis.html#string-literalsを参照してください。

「c:\6」の問題を説明するには:

>>> len("c:\6")
3
>>> len("c:\\6")
4

文字コード 6 は、数字「6」の人間が読める文字列表現ではなく、 ACK 文字です。

mkdir で使用するパスを作成するには、引き続き os.path.join() を使用する必要があります。Python は、プラットフォームに依存するスラッシュの動作を処理します (ドライブ文字を除く... grr! http://docs.python.org/library/os.path.html#os.path.joinを参照してください)。

例:

>>> os.path.join("D:\\", "main", "folder", "blue", "sky", "34")
'D:\\main\\folder\\blue\\sky\\34'
于 2011-01-07T01:02:49.440 に答える
1

文字列では、バックスラッシュ-something は digraph であり、他の何かの文字コードです。

mkdir('c:\newfolder')

'\n' は改行文字であるため失敗します - コンピューターに 'c:{newline}ewfolder' という名前の新しいフォルダーを作成するように指示しましたが、これは有効なフォルダー名ではありません。

適切に機能させるには、次のいずれかを行う必要があります

mkdir(r'c:\newfolder')  # the preceding r makes the string raw,
                        # so digraphs are not processed

mkdir('c:\\newfolder')  # \\ is the digraph for a single backslash

.

編集:これを試してください。問題はありますか?

import os

def dupTree(src, dest):
    src  = os.path.abspath(src)
    dest = os.path.abspath(dest)

    for root,dirs,files in os.walk(src):
        relPath = os.path.relpath(root,src)
        for d in dirs:
            newDir = os.path.normpath(os.path.join(dest, relPath, d))
            os.mkdir(newDir)
于 2011-01-07T01:03:56.727 に答える