从子文件夹获取文件

时间:2018-03-25 14:04:36

标签: python raspberry-pi3 os.path

我对python很新,所以请耐心等待。 我正在尝试编写一个利用面部识别的代码,并且我需要能够访问子文件夹。

目前我遇到了查找“图片”文件夹的问题。执行代码时,我在face-recognition文件夹中,需要访问一级以下的images

- root

--- face-recognition

-- images

def getImagePath():
    currentPath = os.path.dirname(__file__) # Absolute dir the script is in
    filepath = "../images/" # The path where the pictures are uploaded
    fileList = os.listdir(os.path.join(currentPath, filepath))
    return fileList;

执行此代码会出现错误`FileNotFoundError:[Errror 2]没有这样的文件或目录:'../ images /'

编辑: 在尝试重写代码后,我看到了实际问题:

def getImages():
    currentPath = os.path.dirname(os.path.abspath(__file__)); # Absolute dir the script is in
    filepath = "../images/"; # The path where the pictures are uploaded
    directory = os.listdir(os.path.join(currentPath, filepath));
    images = [ fi for fi in directory if fi.endswith(('.JPG', '.jpg', 'jpeg', '.JPEG')) ];
    return images;

通过我的mac上的终端运行此代码片段,没有任何错误。但是在raspberry-pi 3上运行相同的代码时,会抛出错误,并且它不会产生任何感觉。

解决方案: 在检查图像文件夹时,我发现我有一个忽略所有文件的.gitkeep和.gitignore,(甚至.gitkeep),这就是它抛出错误的原因,因为它在覆盆子pi上克隆了repo时删除了文件夹。

2 个答案:

答案 0 :(得分:1)

两部分:

1)你的方向错了。 ../images/上升到一个目录。你只想要images/。对于绝对引用,您需要/face-recognition/images

2)glob是你的朋友https://docs.python.org/3/library/glob.html

import glob 
file_list = glob.glob('/face-recognition/images/*.png')

或您需要的任何扩展程序。

答案 1 :(得分:1)

C:\root
├───my
│   └───path
│       └───tmp.py
├───image

Pathlib模块很方便(Python版本3.4+)。对于上面的目录结构...

在tmp.py中:

from pathlib import Path
p = Path(__file__).parent

图片目录位于tmp.py父母的父母之下。

>>> print(p)
C:\root\my\path
>>> print(p.parent.parent)
C:\root
>>> image_path = p.parent.parent / 'image'
>>> for img in image_path.iterdir():
...     print(img)

C:\root\image\empty.gif
C:\root\image\o.gif
C:\root\image\x.gif
>>>
>>> [str(img) for img in image_path.iterdir()]
['C:\\root\\image\\empty.gif', 'C:\\root\\image\\o.gif', 'C:\\root\\image\\x.gif']
>>>