簡體   English   中英

在另一個目錄中打開文件(Python)

[英]Open File in Another Directory (Python)

我一直對 Python 中的目錄遍歷主題感到有些困惑,並且有一個我很好奇的情況:我有一個文件,我想在一個與我當前所在的目錄基本平行的目錄中訪問。鑒於此目錄結構:

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

我正在嘗試在 fileOpener.py 中編寫腳本以退出 subfldr2,進入 subfldr1,然后在 testfile.txt 上調用 open()。

通過瀏覽 stackoverflow,我看到人們使用osos.path來完成此操作,但我只找到了有關腳本源下的子目錄中的文件的示例。

在處理這個問題時,我意識到我可以將腳本重新定位到 subfldr1 中,然后一切都會好起來的,但我對如何完成這件事感到好奇。

編輯:這個問題特別適用於 Windows 機器,因為我不知道驅動器號和反斜杠會如何影響這一點。

如果您知道文件的完整路徑,則可以執行類似的操作。 但是,如果您的問題與相對路徑直接相關,我不熟悉並且必須進行研究和測試。

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__的一個快速說明,這在交互式解釋器中不起作用,因為它是交互式運行的,而不是從實際文件中運行的。

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())

這適用於 2015 年 9 月回答時

import os
import os.path
import shutil

你找到你的當前目錄:

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

然后你改變一個目錄:

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

然后你可以獲得所有目錄的元組/列表,對於一個目錄:

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

這是一個非常古老的問題,但我認為它會幫助正在學習 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 轉義

這兩個也對我有用:

import os
path = os.path.join(os.getcwd(), 'subfldr1', r'testfile.txt')
# or   
path = r'subfldr1\testfile.txt'
import os

main_path = os.path.dirname(__file__)
file_path = os.path.join(main_path, 'subfldr1\\testfile.txt')
f = open(file_path)

我認為在另一個文件夾中搜索文件的最簡單方法是:

from pathlib import Path

root_folder = Path(__file__).parents[1]

my_path = root_folder / "doc/foo.json"

with open(my_path, "r") as f:
  data = json.load(f)

使用parents[i] ,您可以 go 返回任意數量的目錄,而無需編寫“../../../”

在這里,我有以下架構:

-> root
  -> routes
    myscript
  -> doc
    foo.json

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM