2015-09-09 8 views
5

私はいつもPythonのディレクトリトラバーサルのテーマについて混乱しています。私は興味があります。私はディレクトリにアクセスしたいファイルがあります基本的に私は、現在よ1に平行に考えると、このディレクトリ構造:。別のディレクトリ(Python)でファイルを開く

\parentDirectory 
    \subfldr1 
     -testfile.txt 
    \subfldr2 
     -fileOpener.py 

私はオープンを呼び出し、その後、subfldr2から抜け出すsubfldr1に入る、とするfileOpener.pyにスクリプトにしようとしているが() testfile.txtにあります。

これを達成するにはosos.pathを使用しているのがわかりましたが、スクリプトの起源の下にあるサブディレクトリのファイルに関する例しか見つかりませんでした。

これを実行すると、スクリプトをsubfldr1に再配置してすべてがうまくいくことがわかりましたが、私の好奇心はどのように達成されるのかという点で驚いています。

EDIT:この質問は、ドライブ文字とバックスラッシュがこれを考慮する方法がわからないため、特にWindowsマシンに関するものです。

+0

でSTUFを行うことができます

for item in o: if os.path.exists(item + '\\testfile.txt'): file = item + '\\testfile.txt' 

を使用すると、電流を設定する必要がありますかディレクトリを 'subfldr1' *にして*内部のファイルを開きますか?またはファイルを開くだけですが、現在のディレクトリが変更されているかどうかは関係ありませんか? –

+0

@DanLowe私は実際に現在のディレクトリを変更する必要はありません。私はsubfldr2にあるところからtestfile.txtにアクセスしてください – dbishop

答えて

9

ファイルの完全なパスがわかっている場合は、これと似たようなことができます。しかし、あなたが直接相対パスに関係することを尋ねるならば、私はよく知られておらず、研究とテストをしなければならないでしょう。

path = 'C:\\Users\\Username\\Path\\To\\File' 

with open(path, 'w') as f: 
    f.write(data) 

編集:

ここでは、比較的代わりに絶対のそれを行う方法です。これがWindows上で動作するかどうかわからない場合は、テストする必要があります。

import os 

cur_path = os.path.dirname(__file__) 

new_path = os.path.relpath('..\\subfldr1\\testfile.txt', cur_path) 
with open(new_path, 'w') as f: 
    f.write(data) 

編集2:__file__約簡単なメモ、これは実際のファイルから対話形式ではなく走っされているため、対話インタプリタでは動作しません。

+0

私はそれがこの行に沿って何かになると考えましたが、私はWindowsマシン、ドライブレターとバックスラッシュの追加として、私は確かにこれを少し複雑にします。今質問を編集してそれを指定してください。 – dbishop

+0

窓のために更新されました – electrometro

+0

ちょっとしたノート - あなたは 'r'PATH''にするか、' \\ 'sをエスケープすることができます – theB

2
import os 
import os.path 
import shutil 

あなたの現在のディレクトリを検索:

d = os.getcwd() #Gets the current working directory 

その後、あなたは最高のディレクトリを変更します。

os.chdir("..") #Go up one directory from working directory 

次に、あなたは一つのディレクトリのために、すべてのディレクトリのタプル/リストを取得することができますup:

o = [os.path.join(d,o) for o in os.listdir(d) if os.path.isdir(os.path.join(d,o))] # Gets all directories in the folder as a tuple 

そして、あなたがしたいディレクトリのタプルを検索し、そのディレクトリ内のファイルを開くことができます。そして、あなたは完全なファイルパス「ファイル」

関連する問題