Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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列出更高分辨率的图像_Python_Python 3.x - Fatal编程技术网

使用python列出更高分辨率的图像

使用python列出更高分辨率的图像,python,python-3.x,Python,Python 3.x,我正在尝试编写一个python脚本,它将遍历一个目录并遍历所有子目录,如果任何jpg或png图像的分辨率高于2048*2048,则打印出这些图像的名称。我无法遍历子目录。有人能查一下密码吗 import os import matplotlib.image as plt root_path = 'E:\newfolder' img_list = os.listdir(root_path) for img_name in img_list: if img_name.endswith(

我正在尝试编写一个python脚本,它将遍历一个目录并遍历所有子目录,如果任何jpg或png图像的分辨率高于2048*2048,则打印出这些图像的名称。我无法遍历子目录。有人能查一下密码吗

import os
import matplotlib.image as plt

root_path = 'E:\newfolder'
img_list = os.listdir(root_path)

for img_name in img_list:

    if img_name.endswith(('.png', '.jpg')):
        img = plt.imread(root_path+'/'+img_name)

        if img.shape[0] > 2048 and img.shape[1] > 2048:
            print(root_path, img_name) 

如果您使用的是Python 3.5+,那么可以使用pathlib模块,然后使用递归glob模式查找所有子目录中的所有文件。然后,过滤路径并仅保留后缀为.png或.jpg的路径:


printpath将打印出当前图像的整个绝对路径,但如果您只想打印出名称,可以打印path.name,其中将包含后缀文件扩展名。如果您只需要不带扩展名的文件名,可以打印path.stem。

如果您使用的是Python 3.5+,可以使用pathlib模块,然后使用递归全局模式查找所有子目录中的所有文件。然后,过滤路径并仅保留后缀为.png或.jpg的路径:

printpath将打印出当前图像的整个绝对路径,但如果您只想打印出名称,可以打印path.name,其中将包含后缀文件扩展名。如果只需要不带扩展名的文件名,可以使用os.walk打印path.stem.

爬网子目录

使用os.walk爬网子目录


这是一个完整且经过测试的解决方案,与@Paul和@BrainCity的答案类似。您将看到,我更喜欢使用小而清晰的函数,因为这些函数鼓励可重用代码

您可以像在您的问题中那样使用matplotlib进行图像处理,但是您需要安装Pillow来处理.JPG图像,因为matplotlib仅在本机支持PNG。我更喜欢直接使用枕头,除非你已经在用matplotlib做其他东西了

从pathlib导入路径 从PIL导入图像 def打印高分辨率图像目录:str: root\u path=Pathdirectory.resolve 高分辨率图像=获取高分辨率图像根路径 如果是高分辨率图像: 打印“高分辨率图像:” 对于高分辨率图像中的文件路径: 打印文件路径 def获取高分辨率图像根路径:路径->[]: 返回[根路径中路径的路径。rglob**如果是高分辨率图像路径] def是高分辨率图像文件路径:路径->布尔: 如果是_imagefile_路径: image=image.openfile\u路径 宽度,高度=image.size 返回宽度>2048,高度>2048 返回错误 def是_imagefile:Path->bool: 在['.png','.jpg']中返回file.suffix.lower 测试我们的新功能: 打印高分辨率图像“E:\newfolder”
这是一个完整且经过测试的解决方案,与@Paul和@BrainCity的答案类似。您将看到,我更喜欢使用小而清晰的函数,因为这些函数鼓励可重用代码

您可以像在您的问题中那样使用matplotlib进行图像处理,但是您需要安装Pillow来处理.JPG图像,因为matplotlib仅在本机支持PNG。我更喜欢直接使用枕头,除非你已经在用matplotlib做其他东西了

从pathlib导入路径 从PIL导入图像 def打印高分辨率图像目录:str: root\u path=Pathdirectory.resolve 高分辨率图像=获取高分辨率图像根路径 如果是高分辨率图像: 打印“高分辨率图像:” 对于高分辨率图像中的文件路径: 打印文件路径 def获取高分辨率图像根路径:路径->[]: 返回[根路径中路径的路径。rglob**如果是高分辨率图像路径] def是高分辨率图像文件路径:路径->布尔: 如果是_imagefile_路径: image=image.openfile\u路径 宽度,高度=image.size 返回宽度>2048,高度>2048 返回错误 def是_imagefile:Path->bool: 在['.png','.jpg']中返回file.suffix.lower 测试我们的新功能: 打印高分辨率图像“E:\newfolder”
将根路径“\”更改为“/”。@BhargavDesai已尝试..未工作当前根路径有换行符“\n”。使用“\”时,应在字符串前面加上r原始字符串,如下所示:root\u path=r'E:\newfolder'此外,os.listdir将返回文件名和子目录列表,但不包含完整路径。因此,您不能简单地将它们附加到根路径,因为根路径不包括它们来自的子目录。我建议使用下面建议的pathlib.rglob或os.walk。将根路径“\”更改为“/”。@BhargavDesai尝试过..未工作您当前的根路径有换行符“\n”。使用“\”时,应在字符串前面加上r原始字符串,如下所示:root\u path=r'E:\newfolder'此外,os.listdir将返回文件名和子目录列表,但不包含完整路径。因此,您不能简单地将它们附加到根路径,因为根路径不包括它们来自的子目录。我建议按照下面的建议使用pathlib.rglob或os.walk。@winx是的,for循环的主体只是伪代码。你必须在你的电脑上实现这一部分
n、 @winx是的,for循环的主体只是伪代码。您必须自己实现该部分。如果目录结构中有任何非图像,此解决方案将引发异常。现在工作起来很有魅力。@BrainCity谢谢您。您挽救了这一天。非常感谢:-如果目录结构中有任何非图像,此解决方案将引发异常。现在效果很好。@BrainCity谢谢你。你挽救了这一天。非常感谢:-@winx如果这回答了您的问题,请向上投票白色向上箭头,并选择它作为正确答案绿色复选标记。谢谢Thanx,伙计。您是救世主:-@winx如果这回答了您的问题,请向上投票白色向上箭头,并选择它作为正确答案绿色复选标记。谢谢Thanx,伙计。你是救世主:-
from pathlib import Path

for path in [path for path in Path("dir/to/images").rglob("*.*") if path.suffix.lower() in (".png", ".jpg")]:
    # image = Image(path)
    # if image dimensions greater than 2048 x 2048:
    #     print(path)
import os
import pathlib
from PIL import Image

def crawlImages(directory):
    allowedExtensions = ['.jpg', '.png']
    for root, dirs, files in os.walk(directory):
        for f in files:
            if pathlib.Path(f).suffix in allowedExtensions:
                fileName = os.path.abspath(os.path.join(root, f))
                image = Image.open(fileName)
                width, height = image.size

                # checking minimum image width and height
                if width > 2400 and height > 2400:
                    print(fileName, width, height)


crawlImages('E:\\music')