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

时间:2015-09-09 03:42:38

标签: python windows os.path

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

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

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

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

在此基础上,我意识到我可以将脚本重新定位到subfldr1然后一切都会好起来,但我的好奇心被激发了如何实现这一点。

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

4 个答案:

答案 0 :(得分:13)

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

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 :(得分:3)

import os
import os.path
import shutil

您找到当前目录:

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

然后你更改一个目录:

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

然后你可以获得所有目录的tupple / list,对于一个目录:

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'

然后你可以使用完整的文件路径'文件'

进行stuf

答案 2 :(得分:0)

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

答案 3 :(得分:0)

这是一个非常老的问题,但是我认为它将帮助新手为正在学习python的我排好队。 如果您使用的是Python 3.4或更高版本,则pathlib库随默认发行版一起提供。

要使用它,只需使用正斜杠将路径或文件名传递到新的Path()对象中,然后处理其余部分。要表明该路径是原始字符串,请将./index与实际路径一起放在字符串前面。

例如,

index.ts

来源:The easy way to deal with file paths on Windows, Mac and Linux

(unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape