Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Google Colab中使用pathlib:AttributeError:‘;PosixPath’;对象没有属性‘;ls’;_Python_Pathlib - Fatal编程技术网

Python 在Google Colab中使用pathlib:AttributeError:‘;PosixPath’;对象没有属性‘;ls’;

Python 在Google Colab中使用pathlib:AttributeError:‘;PosixPath’;对象没有属性‘;ls’;,python,pathlib,Python,Pathlib,如果我运行以下代码: from pathlib import Path path = Path('data/mnist') path.ls() 我得到以下错误: AttributeError: ‘PosixPath’ object has no attribute ‘ls’ 查看pathlib中的Path类,我发现: def __new__(cls, *args, **kwargs): if cls is Path: cls = WindowsPath

如果我运行以下代码:

from pathlib import Path
path = Path('data/mnist')
path.ls()
我得到以下错误:

AttributeError: ‘PosixPath’ object has no attribute ‘ls’
查看pathlib中的Path类,我发现:

def __new__(cls, *args, **kwargs):
        if cls is Path:
            cls = WindowsPath if os.name == 'nt' else PosixPath
        self = cls._from_parts(args, init=False)
        if not self._flavour.is_supported:
            raise NotImplementedError("cannot instantiate %r on your system"
                                      % (cls.__name__,))
        self._init()
        return self
我猜这意味着它将运行PosixPath,即:

class PosixPath(Path, PurePosixPath):
    """Path subclass for non-Windows systems.

    On a POSIX system, instantiating a Path should return this object.
    """
    __slots__ = ()
不太清楚这意味着什么


实际上,我在pathlib源代码中根本找不到Path.ls()。这有意义吗?我所遵循的编码教程(在windows机器上)使用了它。

如果您阅读了模块的文档,就可以确认类
路径
确实没有方法
ls
。但是,如果您的目标是列出给定目录中的文件,则可以使用如下
glob
方法:

from pathlib import Path

DIR = '.'
PATHGLOB = Path(DIR).glob('./*')
LS = [fil for fil in PATHGLOB]
Path.ls = lambda x: [o.name for o in x.iterdir()]
我认为这个代码片段实现了与教程中的代码相同的效果

编辑: fastai模块实现的
ls
方法如下:

from pathlib import Path

DIR = '.'
PATHGLOB = Path(DIR).glob('./*')
LS = [fil for fil in PATHGLOB]
Path.ls = lambda x: [o.name for o in x.iterdir()]
我认为观察到的行为是本教程Jupyter笔记本中导入
*
的结果。这可以通过以下代码片段得到证实:

from fastai import data_block

path = data_block.Path('.')
path.ls()

你能分享你正在学习的教程吗?(带有时间戳)这很奇怪,我怀疑笔记本电脑的单元格是在没有重新执行的情况下编辑的。笔记本电脑也缺少了它应该需要的每一个导入。即使来自fastai import*的
实际上也不应该从
fastai
加载任何有用的内容-您必须为此显式导入子模块
fastai
\uuu init\uuuuuuuuuuuupy
不加载任何子模块,但
fastai.version
,并且它没有定义一个
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu列表。是的,我甚至试过从fastai.import.
使用
是的,这很好!我知道如何解决我遇到的问题,但我想弄清楚为什么有人可以在windows机器上使用ls(),而我似乎不能用Google Colab。@JacquesThibodeau我改进了我的答案。我相信观察到的行为是Jupyter笔记本中导入
*
的结果。因此,如果我使用fastai.vision import*
中的
,它会起作用。似乎我需要专门导入一个应用程序才能让它工作。我意识到这一点,因为在我导入
fastai.vision
之前,DataBunch也不起作用。不确定这是否是一个bug。