os.path提供了意外的输出

时间:2019-11-22 01:15:31

标签: python

最近,我开始使用python中的 Os 模块。最后,我来到了这种 Os.path 方法。所以这是我的问题。我在我的kivy项目中运行了这个方法只是为了测试,它实际上没有返回正确的输出。该方法包括查找是否存在任何目录并返回目录中的文件夹列表。否则,打印无效路径并返回 -1 。我传入一个现有目录并返回-1,但奇怪的路径是当我使用与python文件相同的文件夹中的相同路径从kivy项目中运行类似程序时,它返回所需的输出。我已经测试了python文件和目录名称 image ,该返回的路径无效。

enter image description here 这是我的代码段

    def get_imgs(self, img_path):
        if not os.path.exists(img_path):
            print("Invalid Path...")
            return -1
        else:
            all_files = os.listdir(img_path)
            imgs = []
            for f in all_files:
                if (
                f.endswith(".png")
                or f.endswith(".PNG")
                or f.endswith(".jpg")
                or f.endswith(".JPG")
                or f.endswith(".jpeg")
                or f.endswith(".JPEG")
            ):
                imgs.append("/".join([img_path, f]))
        return imgs

1 个答案:

答案 0 :(得分:1)

很难在没有调用函数的情况下看到代码。无论您传递什么参数,都不得为有效路径。我定期使用os模块,并慢慢学习了许多有用的方法。在发生任何意外情况之前,我总是先打印出我正在读取或正在写入的路径,以防万一发生意外情况,例如,我可以看到img_path变量。将文件浏览器中的路径复制并粘贴到目录中,并确保一切正常。

根据您的代码,您会发现其他一些有用的os.path方法:

os.join(<directory>, <file_name.ext>)imgs.append("/".join([img_path, f]))

更直观

os.getcwd()获取您的工作目录(我在开发脚本的开头打印该目录,以便在调试之前快速解决问题)。我通常使用完整路径来保证安全,因为从cmd与PyCharm运行时,Python路径可能会导致差异/问题

os.path.basename(f)为您提供文件,而os.path.dirname(f)为您提供目录。

似乎更好的方法是使用pathlibglob。您可以遍历目录并使用通配符。 看这些:

遍历目录:How can I iterate over files in a given directory?

不同的文件类型:Python glob multiple filetypes

然后,您甚至无需检查是否os.path.exists(img_path),因为这将直接从文件系统读取文件。 glob库中还有更多的通配符,例如*代表任何/任何长度,?代表任何字符,[0-9]代表任何数字,可在以下位置找到:{{3 }}