按名称在目录中迭代图像

时间:2018-02-23 17:32:55

标签: python string loops directory

希望这个相对容易回答,因为我还是Python的新手。

我需要遍历名称 [x] img [y] 的图像,其中x和y是确定图像处理方式的标识符。 x确定进程并且值为1或2,y确定要在处理中使用的值之一。

所以,在伪代码中:

directory = 'my/path/to/images'
for image in directory:
    if x = 1:
        do process a with y
    elif x = 2:
        do process b with y
    else: print "ERROR"

我还不熟悉代码并从字符串中提取值来拼凑我见过的各种不同的例子。我觉得我应该能够将字符串转换为数组,并将第1和第5个值读作整数,对吗?

非常感谢您的帮助,如果您希望更好地了解我尝试使用此项目完成的工作,我已经创建了一个GitHub存储库here

非常感谢:)

修改

感谢 Ely 让我这么做,但是引入了另一个错误。这是我用来打开目录的测试代码,其中包含文件 1img2.png,1img4.png 2img1.png

import os
import re
DIRECTORY = '/home/pi/Desktop/ScannerDev/TestPhotos/'


for img_filename in os.listdir(DIRECTORY):
    x, y = os.path.splitext(img_filename)[0].split('img')
    print 'Camera is ', x
    print 'Image is ', y
"""
for img_filename in os.listdir(DIRECTORY):
    a = re.search('^(.*)img(.*)\.png$', img_filename)
    if a is None:
        break
    else:
        x = a.group(1)
        y = a.group(2)
    print 'Camera is ', x
    print 'Image is ', y
"""

返回:

Camera is  2
Image is  1
Traceback (most recent call last):
  File "iteratorTEST.py", line 10, in <module>
    x, y = os.path.splitext(img_filename)[0].split('img')
ValueError: need more than 1 value to unpack

2 个答案:

答案 0 :(得分:3)

使用os.listdir迭代目录中的图像文件:

for img_filename in os.listdir('my/path/to/images'):

    # in case you don't need to worry about anything but 'img'.
    x, y = img_filename.split('img')

    # in case you want to remove .png as in the comments.
    x, y = os.path.splitext(img_filename)[0].split('img')

    # do stuff here

如果你想强制你的假设,比如.png文件名,在迭代目录时,你可以这样做:

raw_files = os.listdir(DIRECTORY)
for img_filename in filter(lambda x: x.endswith('.png'), raw_files):
    ...

for img_filename in [x for x in os.listdir(DIRECTORY) if x.endswith('.png')]:
    ...

或该想法的各种其他变体。

请注意,您可能还希望进一步对上述xy的结果进行后期处理,例如将其转换为int,或删除任何文件扩展名(如果存在于文件名),os模块中有各种其他辅助函数可以帮助它。

此解决方案严格假设文件完全遵循您给定的格式,并且特殊字符串img仅在文件名中出现一次,并充当X部分之间的完美分隔符以及您需要的Y部分。如果这个假设不正确,你将不得不做一些额外的处理。

答案 1 :(得分:1)

感谢 ely 对此的帮助以及其他人的答案帮助并展示了替代方法。 我写这个作为一个单独的答案,给出了我们在自己的明确区域中找到的最终解决方案

# To extract operators x and y from file named ximgy.png
# where y may be multiple characters long.
import os
DIRECTORY = '/home/pi/Desktop/ScannerDev/TestPhotos/'

for img_filename in os.listdir(DIRECTORY):
    # This ensure hidden files or others don't cause issues
    if img_filename.endswith(".png"):
        x, y = os.path.splitext(img_filename)[0].split('img')
        print 'Camera is ', x
        print 'Image is ', y
        # DO STUFF HERE