13

プロセス中にいくつかのファイルを作成するPythonのプログラムがあります。プログラムに現在のディレクトリを認識させ、そのディレクトリ内にフォルダを作成して、作成したファイルをそのディレクトリに配置するようにしたい。

私はこれを試しました:

current_directory = os.getcwd()
final_directory = os.path.join(current_directory, r'/new_folder')
if not os.path.exists(final_directory):
    os.makedirs(final_directory)

しかし、それは私が望んでいたものを私に与えません。2行目が思い通りに動かないようです。誰でも問題を解決するのを手伝ってもらえますか?

4

2 に答える 2

27

問題がr'/new_folder'あり、スラッシュ (ルート ディレクトリを参照) が使用されていると考えてください。

試してみてください:

current_directory = os.getcwd()
final_directory = os.path.join(current_directory, r'new_folder')
if not os.path.exists(final_directory):
   os.makedirs(final_directory)

それはうまくいくはずです。

于 2013-01-02T16:54:10.797 に答える
12

注意すべきことの 1 つは、(os.path.joinドキュメントによると) 引数の 1 つとして絶対パスが指定されている場合、他の要素は破棄されることです。たとえば (Linux の場合):

In [1]: import os.path

In [2]: os.path.join('first_part', 'second_part')
Out[2]: 'first_part/second_part'

In [3]: os.path.join('first_part', r'/second_part')
Out[3]: '/second_part'

Windows の場合:

>>> import os.path
>>> os.path.join('first_part', 'second_part')
'first_part\\second_part'
>>> os.path.join('first_part', '/second_part')
'/second_part'

引数に先頭が含ま/joinているため、絶対パスとして解釈され、残りは無視されます。/したがって、結合が期待どおりに実行されるようにするには、2 番目の引数の先頭からを削除する必要があります。を含める必要がない理由は、/os.path.join暗黙的に を使用os.sepし、適切なセパレータが使用されるようにするためです (上記の の出力の違いに注意してくださいos.path.join('first_part', 'second_part')。

于 2013-01-02T16:56:14.783 に答える