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。