Python 正在下载图像,要保存到文件夹,请检查文件是否存在
所以我有一个我正在循环的产品记录集(sqlalchemy),我想下载一个图像并将其保存到一个文件夹中 如果文件夹不存在,我想创建它 另外,我想首先检查文件夹中是否存在图像文件如果有,不要下载,直接跳过该行。Python 正在下载图像,要保存到文件夹,请检查文件是否存在,python,file-io,download,Python,File Io,Download,所以我有一个我正在循环的产品记录集(sqlalchemy),我想下载一个图像并将其保存到一个文件夹中 如果文件夹不存在,我想创建它 另外,我想首先检查文件夹中是否存在图像文件如果有,不要下载,直接跳过该行。 /myscript.py /images/ 我希望images文件夹与脚本文件位于同一目录中,无论它存储在何处 到目前为止,我已经: q = session.query(products) for p in q: if p.url: req = urllib
/myscript.py
/images/
我希望images文件夹与脚本文件位于同一目录中,无论它存储在何处
到目前为止,我已经:
q = session.query(products)
for p in q:
if p.url:
req = urllib2.Request(p.url)
try:
response = urllib2.urlopen(req)
image = response.read()
???
except URLError e:
print e
我想您可以在这里使用
urllib.urlretrieve
:
import errno
import os
import urllib
def require_dir(path):
try:
os.makedirs(path)
except OSError, exc:
if exc.errno != errno.EEXIST:
raise
directory = os.path.join(os.path.dirname(os.path.abspath(__file__)), "images")
require_dir(directory)
filename = os.path.join(directory, "stackoverflow.html")
if not os.path.exists(filename):
urllib.urlretrieve("http://stackoverflow.com", filename)
文件名应该位于
response.info()['Content-Disposition']
(作为filename=something
在该字符串中的分号之后)——如果不是(该头缺少、没有分号或没有filename
部分),则可以使用urlparse.urlspilt(p.url)
并获取最后一个非空组件的os.path.basename
(或者,更实用一些,但这会严重冒犯纯粹主义者,只需p.url.split('/')[-1]
;-)
文件名到此为止,请称之为fn
脚本所在的目录是sd=os.path.dirname(\uu文件\uu)
因此,它的images
子目录显然是sdsd=os.path.join(sd,'images')
要检查该子目录是否存在,并将其设为其他子目录
if not os.path.exists(sdsd): os.makedir(sdsd)
要检查要写入的文件是否已存在
if os.path.exists(os.path.join(sdsd, fn)): ...
所有这些代码都会出现在?
中。这是一个很大的函数,所以显然最好将p.url
和response
作为参数(它可以自己读取image
),如果您希望以后可以自由地将该函数移到自己的单独模块中(我建议这样做!),也可以将\uuuu文件
作为参数
当然,对于所有这些
os
和os.path
调用,您需要导入操作系统,如果您决定使用后一个标准库模块,还可以导入URLPrase。路径应该是/images/还是根目录的完整路径?我的示例将使用名为images
的目录,该目录与脚本文件位于同一目录中。在Python 3中,使用:如果不是os.path.exists(path):os.mkdir(path)
而不是。在Python3中,如果不是os.path.exists(path),则使用::os.mkdir(path)
。