我有一个充满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")
答案 0 :(得分:1)
您需要更改此行:
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")
答案 1 :(得分:1)
你需要使用os.walk(path):
提供一些有意义的内容列表,只要提供一个String就可以了,它需要一个列表。
行走文件系统的惯用方法是使用os.walk()
for root, dirs, files in os.walk(path):
答案 2 :(得分:1)
for root, dirs, files in path:
path
这是一个字符串。每个元素只是一个字符,您不能将单个字符解包为三个变量。因此错误消息:您需要多个值来解压缩。
你可能想要:
for root, dirs, files in os.walk(path):