2010-04-06 2 views
1

Моим требованием является поиск jpeg-файлов изображений в каталоге с использованием сценария python и список имен файлов. Может ли кто-нибудь помочь мне в определении файлов изображений jpeg.Поиск jpeg-файлов с использованием python

Заранее спасибо ...

+4

Под «определить», вы просто имели в виду файлы с «.jpg» и «.jpeg» , или вы хотите на самом деле посмотреть содержимое файла и проверить, является ли это образ JPEG? – balpha

+0

Нет, я просто хочу выполнить поиск с использованием расширения файла. – Nims

ответ

2

Используйте magic модуль, чтобы получить тип MIME, и искать image/jpeg.

1
import os 
path=os.path.join("/home","mypath","to_search") 
for r,d,f in os.walk(path): 
    for files in f: 
      if files[-3:].lower()=='jpg' of files[-4:].lower() =="jpeg": 
       print "found: ",os.path.join(r,files) 
+0

Это работает .... Thank u ... :) – Nims

+0

Я нахожу, что 'str.endswith()' легче читать. @Nims: рассмотрите вопрос об утверждении этого ответа или, по крайней мере, его продолжении. –

+1

Я предлагаю 'if os.path.splitext (файлы) [1] в ('.jpg', '.jpeg'):', иначе будет создан файл с именем 'imnotajpeg'. – nosklo

8

Если вам нужно найти одну папку нерекурсивно вы можете просто сделать

>>> import glob 
>>> glob.glob("D:\\bluetooth\*.jpg") 
['D:\\bluetooth\\Image1475.jpg', 'D:\\bluetooth\\Image1514.jpg'] 

Подробнее о glob здесь, вы используете сделать UNIX как подстановочные поиск, например,

>>> import glob 
>>> glob.glob('./[0-9].*') 
['./1.gif', './2.txt'] 
>>> glob.glob('*.gif') 
['1.gif', 'card.gif'] 
>>> glob.glob('?.gif') 
['1.gif'] 
6

Если вы хотите сканировать вложенные папки:

import os 

for root, subdirs, files in os.walk(DIRECTORY): 
    for file in files: 
     if os.path.splitext(file)[1].lower() in ('.jpg', '.jpeg'): 
      print os.path.join(root, file) 

В противном случае, используя одну из других функций Глоб в других ответах, или это:

import os 

for f in os.listdir(DIRECTORY): 
    if os.path.splitext(f)[1].lower() in ('.jpg', '.jpeg'): 
     print os.path.join(DIRECTORY, f) 

должен работать нормально.

+1

'splitext' возвращает расширение с точкой, поэтому вы хотите' in ('.jpg', '.jpeg') '. – nosklo

+0

Да, ты прав. Я обновил его, спасибо, что исправил меня :-) – cryo

+0

Но я не хочу находить файлы в подкаталогах. – Nims

1

Если вы хотите, чтобы определить формат изображения по содержимому файла, вы можете использовать Python Imaging Library: расширение

import Image 
try: 
    img = Image.open('maybe_jpeg_file') 
    print img.format # Will return 'JPEG' for JPEG files. 
except IOError: 
    print "Not an image file or unreadable." 
Смежные вопросы