web-dev-qa-db-ja.com

ディレクトリを変更せずにPython)の新しいディレクトリに書き込む

現在、私は次のコードを持っています...

file_name = content.split('=')[1].replace('"', '') #file, gotten previously
fileName = "/" + self.feed + "/" + self.address + "/" + file_name #add folders 
output = open(file_name, 'wb')
output.write(url.read())
output.close()

私の目標は、pythonにファイル(file_nameの下)を現在のディレクトリ(IE、pythonスクリプトが保存されている)の「feed」フォルダの「address」フォルダにあるファイルに書き込むことです。

Osモジュールを調べましたが、現在のディレクトリを変更したくありません。これらのディレクトリはまだ存在していません。

11
Philip Massey

まず、私は質問を理解することに100%自信がないので、私の仮定を述べさせてください。1)まだ存在しないディレクトリ内のファイルに書き込みたい。 2)パスは(現在のディレクトリに対して)相対的です。 3)現在のディレクトリを変更したくない。

したがって、次のようになります。os.makedirsとos.path.joinの2つの関数を確認してください。 (現在のディレクトリに対する)相対パスを指定したいので、最初の「/」を追加したくありません。

dir_path = os.path.join(self.feed, self.address)  # will return 'feed/address'
os.makedirs(dir_path)                             # create directory [current_path]/feed/address
output = open(os.path.join(dir_path, file_name), 'wb')
10
KP.

これにより、現在のスクリプトと同じディレクトリにファイルfeed/address/file.txtが作成されます。

import os

file_name = 'file.txt'
script_dir = os.path.dirname(os.path.abspath(__file__))
dest_dir = os.path.join(script_dir, 'feed', 'address')
try:
    os.makedirs(dest_dir)
except OSError:
    pass # already exists
path = os.path.join(dest_dir, file_name)
with open(path, 'wb') as stream:
    stream.write('foo\n')
9
ekhumoro

os.mkdirのようなコマンドでは、実際には現在のディレクトリにフォルダを作成する必要はありません。相対パスまたは絶対パスを設定できます。

os.mkdir('../new_dir')
os.mkdir('/home/you/Desktop/stuff')

このような関数を自分で作成する以外に、フォルダーを再帰的に作成してファイルを開く方法がわかりません。これがほぼインラインのコードです。 os.makedirsは、ほとんどの方法でそこに到達します。あなたが私たちに見せていないのと同じ神秘的な自己オブジェクトを使用する:

dir = "/" + self.feed + "/" + self.address + "/"
os.makedirs(dir)
output = open(os.path.join(dir, file_name), 'wb')
0
Thomas