web-dev-qa-db-ja.com

別のディレクトリでファイルを開く(Python)

私は常にPythonでのディレクトリトラバーサルの問題について混乱していましたが、興味がある状況があります。現在アクセスしているディレクトリと基本的に平行なディレクトリにアクセスしたいファイルがあります。このディレクトリ構造の場合:

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

FileOpener.pyでスクリプトを作成して、subfldr2から抜け出し、subfldr1に入り、testfile.txtでopen()を呼び出しています。

Stackoverflowの閲覧から、osos.pathこれを実現するために、スクリプトのOriginの下のサブディレクトリにあるファイルに関する例を見つけました。

これに取り組んで、スクリプトをsubfldr1に再配置するだけで十分であることに気付きましたが、これがどのように達成されるかについての私の好奇心がそそられます。

編集:この質問は、特にWindowsマシンに関するものです。ドライブ文字とバックスラッシュがどのように考慮されるかはわかりません。

12
dbishop

ファイルへのフルパスがわかっている場合は、これと同様のことができます。ただし、質問が相対パスに直接関係している場合、私はそれをよく知らず、調査とテストを行う必要があります。

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__に関する1つの簡単なメモ、これは実際のファイルからではなくインタラクティブに実行されるため、インタラクティブインタープリターでは機能しません。

14
Jared Mackey
import os
import os.path
import shutil

現在のディレクトリを見つけます:

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

次に、1つのディレクトリを変更します。

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

それから、1つのディレクトリについて、すべてのディレクトリのタプル/リストを取得できます。

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

次に、必要なディレクトリをタプルで検索し、そのディレクトリでファイルを開くことができます。

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

次に、完全なファイルパス「file」でstufを実行できます。

3
9953-div-37
from pathlib import Path

data_folder = Path("source_data/text_files/")
file_to_open = data_folder / "raw_data.txt"

f = open(file_to_open)
print(f.read())
1
SaretMagnoslove

それは非常に古い質問ですが、Pythonを学んでいる初心者が私を並べるのに役立つと思います。 Python 3.4以上の場合、pathlibライブラリにはデフォルトの配布が含まれています。

それを使用するには、スラッシュを使用して新しいPath()オブジェクトにパスまたはファイル名を渡すだけで、残りを処理します。パスが生の文字列であることを示すには、実際のパスを含む文字列の前にrを付けます。

例えば、

from pathlib import Path

dataFolder = Path(r'D:\Desktop dump\example.txt')

ソース: Windows、Mac、Linuxでファイルパスを処理する簡単な方法

(unicodeエラー) 'unicodeescape'コーデックは位置2-3のバイトをデコードできません:切り捨てられた\ UXXXXXXXXエスケープ

0
raman