在另一个目录中打开文件(Python)

dbi*_*hop 13 python windows os.path

我一直对Python中的目录遍历问题感到困惑,并且有一种我很好奇的情况:我有一个文件,我想在一个与我当前所在的目录基本平行的目录中访问.鉴于此目录结构:

\parentDirectory
    \subfldr1
        -testfile.txt
    \subfldr2
        -fileOpener.py
Run Code Online (Sandbox Code Playgroud)

我试图在fileOpener.py中编写脚本以退出subfldr2,进入subfldr1,然后在testfile.txt上调用open().

从浏览stackoverflow,我看到人们使用osos.path完成此操作,但我只找到了关于脚本源下的子目录中的文件的示例.

在这方面,我意识到我可以将脚本重新定位到subfldr1然后一切都会很好,但我的好奇心是如何实现这一点.

编辑:这个问题特别适用于Windows机器,因为我不知道驱动器字母和反斜杠将如何影响到这一点.

Jar*_*key 16

如果你知道文件的完整路径,你可以做类似的事情.但是,如果你直接提问与相对路径有关,我不熟悉并且必须进行研究和测试.

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

with open(path, 'w') as f:
    f.write(data)
Run Code Online (Sandbox Code Playgroud)

编辑:

这是一种相对而不是绝对的方式.不确定这是否适用于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)
Run Code Online (Sandbox Code Playgroud)

编辑2:一个快速说明__file__,这在交互式解释器中不起作用,因为它是以交互方式运行而不是从实际文件运行.

  • 您可以简单地执行`os.path.join(cur_path,'.. \\ subfldr1 \\ testfile.txt')`获取绝对路径,而无需从当前工作目录创建相对路径,或者更方便地使用`os .path.join(cur_path,'..','subfldr','testfile.txt')` (2认同)

Roa*_*oan 10

这在回答时适用,2015 年 9 月

import os
import os.path
import shutil
Run Code Online (Sandbox Code Playgroud)

您找到当前目录:

d = os.getcwd() #Gets the current working directory
Run Code Online (Sandbox Code Playgroud)

然后你改变一个目录:

os.chdir("..") #Go up one directory from working directory
Run Code Online (Sandbox Code Playgroud)

然后你可以获得所有目录的元组/列表,对于一个目录:

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
Run Code Online (Sandbox Code Playgroud)

然后你可以在元组中搜索你想要的目录并打开该目录中的文件:

for item in o:
    if os.path.exists(item + '\\testfile.txt'):
    file = item + '\\testfile.txt'
Run Code Online (Sandbox Code Playgroud)

然后你可以用完整的文件路径'file'来做stuf


小智 10

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())
Run Code Online (Sandbox Code Playgroud)


ram*_*man 6

这是一个非常古老的问题,但我认为它会帮助我学习 python 的新手。如果您有 Python 3.4 或更高版本,则 pathlib 库随附默认发行版。

要使用它,您只需使用正斜杠将路径或文件名传递到新的 Path() 对象中,然后它会处理其余部分。要指示路径是原始字符串,请将r实际路径放在字符串前面。

例如,

from pathlib import Path

dataFolder = Path(r'D:\Desktop dump\example.txt')
Run Code Online (Sandbox Code Playgroud)

来源:在 Windows、Mac 和 Linux 上处理文件路径的简单方法

(unicode 错误)“unicodeescape”编解码器无法解码位置 2-3 中的字节:截断的 \UXXXXXXXX 转义