繁体   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