diff --git a/src/calibre/ebooks/lrf/html/convert_from.py b/src/calibre/ebooks/lrf/html/convert_from.py
index 4bbf1fc53e..7a774b456b 100644
--- a/src/calibre/ebooks/lrf/html/convert_from.py
+++ b/src/calibre/ebooks/lrf/html/convert_from.py
@@ -352,10 +352,9 @@ class HTMLConverter(object):
if not os.path.exists(tdir):
os.makedirs(tdir)
try:
- dump = open(os.path.join(tdir, 'html2lrf-verbose.html'), 'wb')
- dump.write(unicode_type(soup).encode('utf-8'))
- self.log.info(_('Written preprocessed HTML to ')+dump.name)
- dump.close()
+ with open(os.path.join(tdir, 'html2lrf-verbose.html'), 'wb') as f:
+ f.write(unicode_type(soup).encode('utf-8'))
+ self.log.info(_('Written preprocessed HTML to ')+f.name)
except:
pass
@@ -375,15 +374,14 @@ class HTMLConverter(object):
if not os.path.exists(path):
path = path.replace('&', '%26') # convertlit replaces & with %26 in file names
- f = open(path, 'rb')
- raw = f.read()
+ with open(path, 'rb') as f:
+ raw = f.read()
if self.pdftohtml: # Bug in pdftohtml that causes it to output invalid UTF-8 files
raw = raw.decode('utf-8', 'ignore')
elif self.encoding is not None:
raw = raw.decode(self.encoding, 'ignore')
else:
raw = xml_to_unicode(raw, self.verbose)[0]
- f.close()
soup = self.preprocess(raw)
self.log.info(_('\tConverting to BBeB...'))
self.current_style = {}
@@ -1935,7 +1933,8 @@ def try_opf(path, options, logger):
dirpath = os.path.dirname(os.path.abspath(opf))
from calibre.ebooks.metadata.opf2 import OPF as OPF2
- opf = OPF2(open(opf, 'rb'), dirpath)
+ with open(opf, 'rb') as f:
+ opf = OPF2(f, dirpath)
try:
title = opf.title
if title and not getattr(options, 'title', None):
diff --git a/src/calibre/ebooks/lrf/pylrs/pylrf.py b/src/calibre/ebooks/lrf/pylrs/pylrf.py
index ba793e50ed..eea5010d59 100644
--- a/src/calibre/ebooks/lrf/pylrs/pylrf.py
+++ b/src/calibre/ebooks/lrf/pylrs/pylrf.py
@@ -687,9 +687,8 @@ class LrfWriter(object):
self.tocObjId = obj.objId
def setThumbnailFile(self, filename, encoding=None):
- f = open(filename, "rb")
- self.thumbnailData = f.read()
- f.close()
+ with open(filename, "rb") as f:
+ self.thumbnailData = f.read()
if encoding is None:
encoding = os.path.splitext(filename)[1][1:]
diff --git a/src/calibre/ebooks/lrf/pylrs/pylrs.py b/src/calibre/ebooks/lrf/pylrs/pylrs.py
index 55a27960cd..84cc3432fa 100644
--- a/src/calibre/ebooks/lrf/pylrs/pylrs.py
+++ b/src/calibre/ebooks/lrf/pylrs/pylrs.py
@@ -2268,9 +2268,8 @@ class ImageStream(LrsObject, LrsContainer):
self.encoding = encoding
def toLrf(self, lrfWriter):
- imageFile = open(self.filename, "rb")
- imageData = imageFile.read()
- imageFile.close()
+ with open(self.filename, "rb") as f:
+ imageData = f.read()
isObj = LrfObject("ImageStream", self.objId)
if self.comment is not None:
diff --git a/src/calibre/ebooks/metadata/extz.py b/src/calibre/ebooks/metadata/extz.py
index aab3a621ff..771ae83c03 100644
--- a/src/calibre/ebooks/metadata/extz.py
+++ b/src/calibre/ebooks/metadata/extz.py
@@ -64,7 +64,8 @@ def set_metadata(stream, mi):
raise Exception('no cover')
except:
try:
- new_cdata = open(mi.cover, 'rb').read()
+ with open(mi.cover, 'rb') as f:
+ new_cdata = f.read()
except:
pass
if new_cdata:
diff --git a/src/calibre/ebooks/metadata/meta.py b/src/calibre/ebooks/metadata/meta.py
index 9d335c81c9..57e520ad00 100644
--- a/src/calibre/ebooks/metadata/meta.py
+++ b/src/calibre/ebooks/metadata/meta.py
@@ -215,7 +215,8 @@ def opf_metadata(opfpath):
cpath = os.path.join(os.path.dirname(opfpath), opf.cover)
if os.access(cpath, os.R_OK):
fmt = cpath.rpartition('.')[-1]
- data = open(cpath, 'rb').read()
+ with open(cpath, 'rb') as f:
+ data = f.read()
mi.cover_data = (fmt, data)
return mi
except:
diff --git a/src/calibre/ebooks/metadata/mobi.py b/src/calibre/ebooks/metadata/mobi.py
index 79ddc84bac..28eb029fe1 100644
--- a/src/calibre/ebooks/metadata/mobi.py
+++ b/src/calibre/ebooks/metadata/mobi.py
@@ -443,7 +443,10 @@ class MetadataUpdater(object):
if mi.cover_data[1] or mi.cover:
try:
- data = mi.cover_data[1] if mi.cover_data[1] else open(mi.cover, 'rb').read()
+ data = mi.cover_data[1]
+ if not data:
+ with open(mi.cover, 'rb') as f:
+ data = f.read()
except:
pass
else:
diff --git a/src/calibre/ebooks/metadata/toc.py b/src/calibre/ebooks/metadata/toc.py
index ec5ab025be..c19f4e35a8 100644
--- a/src/calibre/ebooks/metadata/toc.py
+++ b/src/calibre/ebooks/metadata/toc.py
@@ -180,8 +180,9 @@ class TOC(list):
def read_ncx_toc(self, toc, root=None):
self.base_path = os.path.dirname(toc)
if root is None:
- raw = xml_to_unicode(open(toc, 'rb').read(), assume_utf8=True,
- strip_encoding_pats=True)[0]
+ with open(toc, 'rb') as f:
+ raw = xml_to_unicode(f.read(), assume_utf8=True,
+ strip_encoding_pats=True)[0]
root = etree.fromstring(raw, parser=etree.XMLParser(recover=True,
no_network=True))
xpn = {'re': 'http://exslt.org/regular-expressions'}
@@ -234,7 +235,9 @@ class TOC(list):
def read_html_toc(self, toc):
self.base_path = os.path.dirname(toc)
- for href, fragment, txt in parse_html_toc(lopen(toc, 'rb').read()):
+ with lopen(toc, 'rb') as f:
+ parsed_toc = parse_html_toc(f.read())
+ for href, fragment, txt in parsed_toc:
add = True
for i in self.flat():
if i.href == href and i.fragment == fragment: