使用Path.parents访问Path的Pathlib错误

时间:2018-02-08 13:43:37

标签: python python-3.x pycharm index-error pathlib

为什么我在Python IDE(PyCharm)中运行以下代码片段代码:

(30, 35, 512)

它工作正常并返回所需的结果,但是当我通过命令行运行脚本时,我收到错误:

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

我在这里缺少什么? 还有一个更好/更简单的方法从我运行脚本的当前路径向上移动两个文件夹(在脚本内)?

1 个答案:

答案 0 :(得分:2)

__file__可以是相对路径,只是 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')