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

问题描述 投票:0回答:7
我一直对 Python 中目录遍历的主题感到困惑,并且有一种情况我很好奇:我想在与我当前所在目录基本平行的目录中访问一个文件.给定这个目录结构:

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

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

通过浏览 stackoverflow,我看到人们使用

os

os.path
 来完成此操作,但我只找到了有关脚本来源下子目录中的文件的示例。 

在做这个工作时,我意识到我可以将脚本重新定位到 subfldr1 中,然后一切都会好起来,但我的好奇心被激起了,这将如何完成。

编辑:这个问题特别适用于Windows机器,因为我不知道驱动器号和反斜杠如何影响这个问题。

python windows os.path
7个回答
48
投票
如果您知道文件的完整路径,您可以执行与此类似的操作。但是,如果您的问题直接与相对路径相关,那么我不熟悉并且必须研究和测试。

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__

的一个快速说明,这在交互式解释器中不起作用,因为它是交互式运行的,而不是从实际文件运行的。 


17
投票
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())
    

11
投票
这适用于 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”进行操作


7
投票
这是一个非常老的问题,但我认为它会帮助正在学习 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 转义


3
投票
我认为在另一个文件夹中搜索文件的最简单方法是:

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]

,您可以返回任意多个目录,而无需编写“../../../”

在这里,我有以下架构:

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

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

0
投票
我认为从另一个目录获取文件的简单方法是

从路径库导入路径

data_folder = 路径("C:/Users/Data_Folder") file_to_open = data_folder / "json.txt"

使用 open(file_to_open, 'r') 作为文件: 打印(文件.read())

© www.soinside.com 2019 - 2024. All rights reserved.