Pathlib 使用 Path.parents 访问路径时出错
Pathlib Error accessing Path with Path.parents
为什么当我 运行 Python IDE (PyCharm) 中的以下片段代码时:
import os
from pathlib import Path
if os.path.isfile('shouldfail.txt'):
p = Path(__file__).parents[0]
p2 = Path(__file__).parents[2]
path_1 = str(p)
path_2 = str(p2)
List = open(path_1 + r"/shouldfail.txt").readlines()
List2 = open(path_2 + r"/postassembly/target/generatedShouldfail.txt").readlines()
它工作正常并且 returns 想要的结果,但是当我通过命令行 运行 脚本时,我得到错误:
File "Script.py", line 6, in <module>
p2 = Path(__file__).parents[2]
File "C:\Users\Bob\AppData\Local\Programs\Python\Python36\lib\pathlib.py", line 594, in __getitem__
raise IndexError(idx)
IndexError: 2
我在这里错过了什么?
还有一种 better/easier 方法可以将两个文件夹从我 运行 正在执行脚本的当前路径向上移动(在脚本内)?
__file__
可以是 relative 路径,它是 just Script.py
(如您的回溯所示).
先解析成绝对路径:
here = Path(__file__).resolve()
p = here.parents[0]
p2 = here.parents[2]
注意 open()
接受 pathlib.Path()
个对象,不需要将它们转换为字符串。
换句话说,以下作品:
with open(path_1 / "shouldfail.txt") as fail:
list1 = list(fail)
with open(path_2 / "postassembly/target/generatedShouldfail.txt") as generated:
list = list(generated)
(打开文件对象上的调用列表为您提供所有行)。
演示:
>>> from pathlib import Path
>>> Path('Script')
WindowsPath('Script')
>>> Path('Script').resolve()
WindowsPath('C:\Users\Bob\Further\Path')
>>> Path('Script').resolve().parents[2] / 'shouldfail.txt'
WindowsPath('C:\Users\Bob\shouldfail.txt')
为什么当我 运行 Python IDE (PyCharm) 中的以下片段代码时:
import os
from pathlib import Path
if os.path.isfile('shouldfail.txt'):
p = Path(__file__).parents[0]
p2 = Path(__file__).parents[2]
path_1 = str(p)
path_2 = str(p2)
List = open(path_1 + r"/shouldfail.txt").readlines()
List2 = open(path_2 + r"/postassembly/target/generatedShouldfail.txt").readlines()
它工作正常并且 returns 想要的结果,但是当我通过命令行 运行 脚本时,我得到错误:
File "Script.py", line 6, in <module>
p2 = Path(__file__).parents[2]
File "C:\Users\Bob\AppData\Local\Programs\Python\Python36\lib\pathlib.py", line 594, in __getitem__
raise IndexError(idx)
IndexError: 2
我在这里错过了什么? 还有一种 better/easier 方法可以将两个文件夹从我 运行 正在执行脚本的当前路径向上移动(在脚本内)?
__file__
可以是 relative 路径,它是 just Script.py
(如您的回溯所示).
先解析成绝对路径:
here = Path(__file__).resolve()
p = here.parents[0]
p2 = here.parents[2]
注意 open()
接受 pathlib.Path()
个对象,不需要将它们转换为字符串。
换句话说,以下作品:
with open(path_1 / "shouldfail.txt") as fail:
list1 = list(fail)
with open(path_2 / "postassembly/target/generatedShouldfail.txt") as generated:
list = list(generated)
(打开文件对象上的调用列表为您提供所有行)。
演示:
>>> from pathlib import Path
>>> Path('Script')
WindowsPath('Script')
>>> Path('Script').resolve()
WindowsPath('C:\Users\Bob\Further\Path')
>>> Path('Script').resolve().parents[2] / 'shouldfail.txt'
WindowsPath('C:\Users\Bob\shouldfail.txt')