我一直对Python中的目录遍历主题感到困惑,并且有一种我很好奇的情况:我有一个文件,我想在一个与我的目录基本平行的目录中访问目前在。鉴于此目录结构:
\parentDirectory
\subfldr1
-testfile.txt
\subfldr2
-fileOpener.py
我正在尝试在fileOpener.py中编写脚本以退出subfldr2,进入subfldr1,然后在testfile.txt上调用open()。
从浏览stackoverflow,我看到人们使用os
和os.path
来完成此任务,但我只找到了关于脚本源下的子目录中的文件的示例。
在此基础上,我意识到我可以将脚本重新定位到subfldr1然后一切都会好起来,但我的好奇心被激发了如何实现这一点。
编辑:这个问题特别适用于Windows机器,因为我不知道驱动器字母和反斜杠会如何影响它。
答案 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