Как мне разобрать каждый HTML-файл в каталоге для изображений? - PullRequest
1 голос
/ 08 марта 2012

У меня есть каталог, полный HTML-файлов, в каждом из которых есть клиническое изображение пациента с псориазом. Я хочу открыть каждый файл, найти изображение и сохранить его в том же каталоге.

import os, os.path
import Image
from BeautifulSoup import BeautifulSoup as bs

path = 'C:\Users\gokalraina\Desktop\derm images'

for root, dirs, files in path:
    for f in files:
        soup = bs(f)
        for image in soup.findAll("img"):
            print "Image: %(src)s" % image
            im = Image.open(image)
            im.save(path+image["src"], "JPEG")

Я получаю эту ошибку:

 Traceback (most recent call last):
   File "C:\Users\gokalraina\Desktop\modfile.py", line 7, in <module>
     for root, dirs, files in path:
 ValueError: need more than 1 value to unpack

Даже после поиска ошибки я понятия не имею, что не так или я делаю это правильно. Пожалуйста, имейте в виду, что я новичок в Python.

РЕДАКТИРОВАТЬ: После внесения предлагаемых изменений в программу, я все еще получаю ошибку:

  Traceback (most recent call last):
  File "C:\Users\gokalraina\Desktop\modfile.py", line 25, in <module>
    im = Image.open(image)
  File "C:\Python27\lib\site-packages\PIL\Image.py", line 1956, in open
    prefix = fp.read(16)
 TypeError: 'NoneType' object is not callable

Это исправленный код (спасибо nightcracker)

 import os, os.path
 import Image
 from BeautifulSoup import BeautifulSoup as bs

 path = 'C:\Users\gokalraina\Desktop\derm images'

 for root, dirs, files in os.walk(path):
    for f in files:
       soup = bs(open(os.path.join(root, f)).read())
       for image in soup.findAll("img"):
          print "Image: %(src)s" % image
          im = Image.open(image)
          im.save(path+image["src"], "JPEG")

Ответы [ 3 ]

1 голос
/ 08 марта 2012

Вы должны предоставить список чего-то значащего, используя os.walk(path):, предоставляя строку - это одна вещь, она ожидает список вещей.

Идиоматический способ обхода файловой системы заключается в использовании os.walk ()

for root, dirs, files in os.walk(path):

1 голос
/ 08 марта 2012
for root, dirs, files in path:

path здесь строка. Каждый элемент представляет собой только один символ, и вы не можете распаковать один символ в три переменные. Отсюда сообщение об ошибке: вам нужно более одного значения для распаковки.

Вы, вероятно, хотите:

for root, dirs, files in os.walk(path):
1 голос
/ 08 марта 2012

Вам необходимо изменить эту строку:

for root, dirs, files in path:

на

for root, dirs, files in os.walk(path):

Также обратите внимание, что files являются файлами имен , а не объектами, поэтому этобудет ваш фиксированный код:

import os, os.path
import Image
from BeautifulSoup import BeautifulSoup as bs

path = 'C:\Users\gokalraina\Desktop\derm images'

for root, dirs, files in os.walk(path):
    for f in files:
        soup = bs(open(os.path.join(root, f)).read())
        for image in soup.findAll("img"):
            print "Image: %(src)s" % image
            im = Image.open(image)
            im.save(path+image["src"], "JPEG")
...