2016-12-03 8 views
-1

私のmain.pyスクリプトがルートフォルダProjectにあるプロジェクトを作成しました。私は内部にutilsディレクトリがあり、このディレクトリへのパスを取得したいと思います。私は私のutilsのディレクトリにある.pdfファイルセーブ機能作ら:Python - プロジェクト内のディレクトリへのパスを設定しました

with open(os.path.abspath('utils/' + self.object.object_name+ '.pdf'), 'wb') as f: 
       f.write(pdf) 

を私はエラーを取得:

IOError: [Errno 2] No such file or directory: '/home/documents/office/projects/me/utils/d.pdf'

は、どのように私はそれを正しい方法を行うためにos.path.abspathを変更できますか?
私はいつもutilsディレクトリに入りたいです。

+0

'abspath'は、提供されるパスの絶対パスを与えます。あなたができることをしても、なぜあなたはそれを変更する必要がありますか?別のディレクトリが必要な場合は、それを入力/計算します。 'abspath'はそれを助けません。 –

+0

私は 'os.path.basename'または' os.path.dirname'を使ってutilsディレクトリを改善することができると思います。ルートフォルダはどこからでも呼び出すことができます – allocer

+0

これらの関数はあなたの情報を抽出します。 *定義する*パス。 –

答えて

0

パスの定義が必要です。そしてあなたはそれを相対的に保つことができます。

yourPath = './utils/' 
yourFileName = self.object.object_name+ '.pdf' 

yourFullFileName = yourPath+yourFileName 

し、最終的に

with open(yourFullFileName, 'wb') as f: 
      f.write(pdf) 

UPDATE

小さなもちろん後スコットハンターは私が償い(彼のコメントをCF)、私を与えました。パスを作成する正しい方法は次のとおりです。

working_dir = os.path.dirname(__file__)# __file__ is the full name of your working script 
yourFullFileName = os.path.join(working_dir, 'util', self.object.object_name + "." + 'pdf') 

このようにすると、(オペレーティングシステムに依存する)セパレータについての前提はありません。

+0

これはパスの構築方法ではなく、 '。/ utils'と' utils'は等価です( '/'はパスの区切りであると仮定します)。 @ScottHunter。 –

+0

"[...]と仮定すると、'/'はパス区切り文字です。' 'os.sep'を使うべきですか?私は、スラッシュ文字は、どのようなものであれ、相対パスで使用されているときは常に動作していると考えました。これは当てはまりませんか? – Kanak

+0

あなたの更新されたコメントは解決策です。どうも。 – allocer

関連する問題