在另一个目录中打开文件 (Python)
Open File in Another Directory (Python)
我一直对 Python 中的目录遍历问题感到困惑,并且有一种情况我很好奇:我有一个文件,我想在一个基本上并行的目录中访问到我目前所在的目录。鉴于此目录结构:
\parentDirectory
\subfldr1
-testfile.txt
\subfldr2
-fileOpener.py
我正在尝试在 fileOpener.py 中编写脚本以退出 subfldr2,进入 subfldr1,然后在 testfile.txt 上调用 open()。
通过浏览 Whosebug,我看到人们使用 os
和 os.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__
的一个简短说明,这在交互式解释器中不起作用,因为它是 运行 交互式的,而不是来自实际的文件。
这适用于 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
然后您可以获得所有目录的 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 '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())
这是一个非常古老的问题,但我认为它会对正在学习的新手们有所帮助python。
如果你有 Python 3.4 或更高版本,pathlib 库是默认分发的。
要使用它,您只需使用正斜杠将路径或文件名传递到新的 Path() 对象中,其余的由它处理。要指示该路径是原始字符串,请将 r
放在带有您的实际路径的字符串前面。
例如,
from pathlib import Path
dataFolder = Path(r'D:\Desktop dump\example.txt')
来源:The easy way to deal with file paths on Windows, Mac and Linux
(unicode 错误)'unicodeescape' 编解码器无法解码位置 2-3 中的字节:截断的 \UXXXXXXXX 转义
这两个对我也有用:
import os
path = os.path.join(os.getcwd(), 'subfldr1', r'testfile.txt')
# or
path = r'subfldr1\testfile.txt'
我一直对 Python 中的目录遍历问题感到困惑,并且有一种情况我很好奇:我有一个文件,我想在一个基本上并行的目录中访问到我目前所在的目录。鉴于此目录结构:
\parentDirectory
\subfldr1
-testfile.txt
\subfldr2
-fileOpener.py
我正在尝试在 fileOpener.py 中编写脚本以退出 subfldr2,进入 subfldr1,然后在 testfile.txt 上调用 open()。
通过浏览 Whosebug,我看到人们使用 os
和 os.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__
的一个简短说明,这在交互式解释器中不起作用,因为它是 运行 交互式的,而不是来自实际的文件。
这适用于 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
然后您可以获得所有目录的 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 '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())
这是一个非常古老的问题,但我认为它会对正在学习的新手们有所帮助python。 如果你有 Python 3.4 或更高版本,pathlib 库是默认分发的。
要使用它,您只需使用正斜杠将路径或文件名传递到新的 Path() 对象中,其余的由它处理。要指示该路径是原始字符串,请将 r
放在带有您的实际路径的字符串前面。
例如,
from pathlib import Path
dataFolder = Path(r'D:\Desktop dump\example.txt')
来源:The easy way to deal with file paths on Windows, Mac and Linux
(unicode 错误)'unicodeescape' 编解码器无法解码位置 2-3 中的字节:截断的 \UXXXXXXXX 转义
这两个对我也有用:
import os
path = os.path.join(os.getcwd(), 'subfldr1', r'testfile.txt')
# or
path = r'subfldr1\testfile.txt'