diff -r d478a2a5738a Tools/demo/markov.py --- a/Tools/demo/markov.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/demo/markov.py Fri Mar 20 12:55:59 2015 +0200 @@ -79,8 +79,8 @@ def test(): else: f = open(filename, 'r') if debug: print('processing', filename, '...') - text = f.read() - f.close() + with f: + text = f.read() paralist = text.split('\n\n') for para in paralist: if debug > 1: print('feeding ...') diff -r d478a2a5738a Tools/demo/rpython.py --- a/Tools/demo/rpython.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/demo/rpython.py Fri Mar 20 12:55:59 2015 +0200 @@ -22,17 +22,16 @@ def main(): port = int(port[i+1:]) host = host[:i] command = ' '.join(sys.argv[2:]) - s = socket(AF_INET, SOCK_STREAM) - s.connect((host, port)) - s.send(command.encode()) - s.shutdown(SHUT_WR) - reply = b'' - while True: - data = s.recv(BUFSIZE) - if not data: - break - reply += data - print(reply.decode(), end=' ') - s.close() + with socket(AF_INET, SOCK_STREAM) as s: + s.connect((host, port)) + s.send(command.encode()) + s.shutdown(SHUT_WR) + reply = b'' + while True: + data = s.recv(BUFSIZE) + if not data: + break + reply += data + print(reply.decode(), end=' ') main() diff -r d478a2a5738a Tools/demo/rpythond.py --- a/Tools/demo/rpythond.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/demo/rpythond.py Fri Mar 20 12:55:59 2015 +0200 @@ -26,16 +26,16 @@ def main(): s.listen(1) while True: conn, (remotehost, remoteport) = s.accept() - print('connection from', remotehost, remoteport) - request = b'' - while 1: - data = conn.recv(BUFSIZE) - if not data: - break - request += data - reply = execute(request.decode()) - conn.send(reply.encode()) - conn.close() + with conn: + print('connection from', remotehost, remoteport) + request = b'' + while 1: + data = conn.recv(BUFSIZE) + if not data: + break + request += data + reply = execute(request.decode()) + conn.send(reply.encode()) def execute(request): stdout = sys.stdout diff -r d478a2a5738a Tools/freeze/checkextensions_win32.py --- a/Tools/freeze/checkextensions_win32.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/freeze/checkextensions_win32.py Fri Mar 20 12:55:59 2015 +0200 @@ -130,7 +130,8 @@ def parse_dsp(dsp): ret = [] dsp_path, dsp_name = os.path.split(dsp) try: - lines = open(dsp, "r").readlines() + with open(dsp, "r") as fp: + lines = fp.readlines() except IOError as msg: sys.stderr.write("%s: %s\n" % (dsp, msg)) return None diff -r d478a2a5738a Tools/freeze/freeze.py --- a/Tools/freeze/freeze.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/freeze/freeze.py Fri Mar 20 12:55:59 2015 +0200 @@ -144,7 +144,8 @@ def main(): # last option can not be "-i", so this ensures "pos+1" is in range! if sys.argv[pos] == '-i': try: - options = open(sys.argv[pos+1]).read().split() + with open(sys.argv[pos+1]) as infp: + options = infp.read().split() except IOError as why: usage("File name '%s' specified with the -i option " "can not be read - %s" % (sys.argv[pos+1], why) ) diff -r d478a2a5738a Tools/i18n/msgfmt.py --- a/Tools/i18n/msgfmt.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/i18n/msgfmt.py Fri Mar 20 12:55:59 2015 +0200 @@ -109,7 +109,8 @@ def make(filename, outfile): outfile = os.path.splitext(infile)[0] + '.mo' try: - lines = open(infile, 'rb').readlines() + with open(infile, 'rb') as f: + lines = f.readlines() except IOError as msg: print(msg, file=sys.stderr) sys.exit(1) @@ -199,7 +200,8 @@ def make(filename, outfile): output = generate() try: - open(outfile,"wb").write(output) + with open(outfile,"wb") as f: + f.write(output) except IOError as msg: print(msg, file=sys.stderr) diff -r d478a2a5738a Tools/i18n/pygettext.py --- a/Tools/i18n/pygettext.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/i18n/pygettext.py Fri Mar 20 12:55:59 2015 +0200 @@ -595,9 +595,8 @@ def main(): # initialize list of strings to exclude if options.excludefilename: try: - fp = open(options.excludefilename) - options.toexclude = fp.readlines() - fp.close() + with open(options.excludefilename) as fp: + options.toexclude = fp.readlines() except IOError: print(_( "Can't read --exclude-file: %s") % options.excludefilename, file=sys.stderr) diff -r d478a2a5738a Tools/pybench/pybench.py --- a/Tools/pybench/pybench.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/pybench/pybench.py Fri Mar 20 12:55:59 2015 +0200 @@ -893,10 +893,9 @@ python pybench.py -s p25.pybench -c p21. if compare_to: try: - f = open(compare_to,'rb') - bench = pickle.load(f) - bench.name = compare_to - f.close() + with open(compare_to,'rb') as f: + bench = pickle.load(f) + bench.name = compare_to compare_to = bench except IOError as reason: print('* Error opening/reading file %s: %s' % ( @@ -906,10 +905,9 @@ python pybench.py -s p25.pybench -c p21. if show_bench: try: - f = open(show_bench,'rb') - bench = pickle.load(f) - bench.name = show_bench - f.close() + with open(show_bench,'rb') as f: + bench = pickle.load(f) + bench.name = show_bench bench.print_header() if compare_to: bench.print_comparison(compare_to, @@ -960,10 +958,9 @@ python pybench.py -s p25.pybench -c p21. if reportfile: try: - f = open(reportfile,'wb') - bench.name = reportfile - pickle.dump(bench,f) - f.close() + with open(reportfile,'wb') as: + bench.name = reportfile + pickle.dump(bench,f) except IOError as reason: print('* Error opening/writing reportfile %s: %s' % ( reportfile, diff -r d478a2a5738a Tools/scripts/cleanfuture.py --- a/Tools/scripts/cleanfuture.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/scripts/cleanfuture.py Fri Mar 20 12:55:59 2015 +0200 @@ -96,11 +96,11 @@ def check(file): errprint("%r: I/O Error: %s" % (file, str(msg))) return - ff = FutureFinder(f, file) - changed = ff.run() - if changed: - ff.gettherest() - f.close() + with f: + ff = FutureFinder(f, file) + changed = ff.run() + if changed: + ff.gettherest() if changed: if verbose: print("changed.") @@ -122,9 +122,8 @@ def check(file): os.rename(file, bak) if verbose: print("renamed", file, "to", bak) - g = open(file, "w") - ff.write(g) - g.close() + with open(file, "w") as g: + ff.write(g) if verbose: print("wrote new", file) else: diff -r d478a2a5738a Tools/scripts/combinerefs.py --- a/Tools/scripts/combinerefs.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/scripts/combinerefs.py Fri Mar 20 12:55:59 2015 +0200 @@ -85,9 +85,7 @@ def read(fileiter, pat, whilematch): else: break -def combine(fname): - f = open(fname) - +def combinefile(f): fi = iter(f) for line in read(fi, re.compile(r'^Remaining objects:$'), False): @@ -121,8 +119,11 @@ def combine(fname): print('[%s->%s]' % (addr2rc[addr], rc), end=' ') print(guts, addr2guts[addr]) - f.close() print("%d objects before, %d after" % (before, after)) +def combine(fname): + with open(fname) as f: + combinefile(f) + if __name__ == '__main__': combine(sys.argv[1]) diff -r d478a2a5738a Tools/scripts/dutree.py --- a/Tools/scripts/dutree.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/scripts/dutree.py Fri Mar 20 12:55:59 2015 +0200 @@ -4,18 +4,18 @@ import os, sys, errno def main(): - p = os.popen('du ' + ' '.join(sys.argv[1:]), 'r') total, d = None, {} - for line in p.readlines(): - i = 0 - while line[i] in '0123456789': i = i+1 - size = eval(line[:i]) - while line[i] in ' \t': i = i+1 - filename = line[i:-1] - comps = filename.split('/') - if comps[0] == '': comps[0] = '/' - if comps[len(comps)-1] == '': del comps[len(comps)-1] - total, d = store(size, comps, total, d) + with os.popen('du ' + ' '.join(sys.argv[1:])) as p: + for line in p: + i = 0 + while line[i] in '0123456789': i = i+1 + size = eval(line[:i]) + while line[i] in ' \t': i = i+1 + filename = line[i:-1] + comps = filename.split('/') + if comps[0] == '': comps[0] = '/' + if comps[len(comps)-1] == '': del comps[len(comps)-1] + total, d = store(size, comps, total, d) try: display(total, d) except IOError as e: diff -r d478a2a5738a Tools/scripts/eptags.py --- a/Tools/scripts/eptags.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/scripts/eptags.py Fri Mar 20 12:55:59 2015 +0200 @@ -28,29 +28,30 @@ def treat_file(filename, outfp): except: sys.stderr.write('Cannot open %s\n'%filename) return - charno = 0 - lineno = 0 - tags = [] - size = 0 - while 1: - line = fp.readline() - if not line: - break - lineno = lineno + 1 - m = matcher.search(line) - if m: - tag = m.group(0) + '\177%d,%d\n' % (lineno, charno) - tags.append(tag) - size = size + len(tag) - charno = charno + len(line) + with fp: + charno = 0 + lineno = 0 + tags = [] + size = 0 + while 1: + line = fp.readline() + if not line: + break + lineno = lineno + 1 + m = matcher.search(line) + if m: + tag = m.group(0) + '\177%d,%d\n' % (lineno, charno) + tags.append(tag) + size = size + len(tag) + charno = charno + len(line) outfp.write('\f\n%s,%d\n' % (filename,size)) for tag in tags: outfp.write(tag) def main(): - outfp = open('TAGS', 'w') - for filename in sys.argv[1:]: - treat_file(filename, outfp) + with open('TAGS', 'w') as outfp: + for filename in sys.argv[1:]: + treat_file(filename, outfp) if __name__=="__main__": main() diff -r d478a2a5738a Tools/scripts/finddiv.py --- a/Tools/scripts/finddiv.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/scripts/finddiv.py Fri Mar 20 12:55:59 2015 +0200 @@ -55,17 +55,17 @@ def process(filename, listnames): except IOError as msg: sys.stderr.write("Can't open: %s\n" % msg) return 1 - g = tokenize.generate_tokens(fp.readline) - lastrow = None - for type, token, (row, col), end, line in g: - if token in ("/", "/="): - if listnames: - print(filename) - break - if row != lastrow: - lastrow = row - print("%s:%d:%s" % (filename, row, line), end=' ') - fp.close() + with fp: + g = tokenize.generate_tokens(fp.readline) + lastrow = None + for type, token, (row, col), end, line in g: + if token in ("/", "/="): + if listnames: + print(filename) + break + if row != lastrow: + lastrow = row + print("%s:%d:%s" % (filename, row, line), end=' ') def processdir(dir, listnames): try: diff -r d478a2a5738a Tools/scripts/fixnotice.py --- a/Tools/scripts/fixnotice.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/scripts/fixnotice.py Fri Mar 20 12:55:59 2015 +0200 @@ -73,22 +73,19 @@ def main(): elif opt == '--dry-run': DRYRUN = 1 elif opt == '--oldnotice': - fp = open(arg) - OLD_NOTICE = fp.read() - fp.close() + with open(arg) as fp: + OLD_NOTICE = fp.read() elif opt == '--newnotice': - fp = open(arg) - NEW_NOTICE = fp.read() - fp.close() + with open(arg) as fp: + NEW_NOTICE = fp.read() for arg in args: process(arg) def process(file): - f = open(file) - data = f.read() - f.close() + with open(file) as f: + data = f.read() i = data.find(OLD_NOTICE) if i < 0: if VERBOSE: @@ -102,9 +99,8 @@ def process(file): data = data[:i] + NEW_NOTICE + data[i+len(OLD_NOTICE):] new = file + ".new" backup = file + ".bak" - f = open(new, "w") - f.write(data) - f.close() + with open(new, "w") as f: + f.write(data) os.rename(file, backup) os.rename(new, file) diff -r d478a2a5738a Tools/scripts/fixps.py --- a/Tools/scripts/fixps.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/scripts/fixps.py Fri Mar 20 12:55:59 2015 +0200 @@ -14,20 +14,18 @@ def main(): except IOError as msg: print(filename, ': can\'t open :', msg) continue - line = f.readline() - if not re.match('^#! */usr/local/bin/python', line): - print(filename, ': not a /usr/local/bin/python script') - f.close() - continue - rest = f.read() - f.close() + with f: + line = f.readline() + if not re.match('^#! */usr/local/bin/python', line): + print(filename, ': not a /usr/local/bin/python script') + continue + rest = f.read() line = re.sub('/usr/local/bin/python', '/usr/bin/env python', line) print(filename, ':', repr(line)) - f = open(filename, "w") - f.write(line) - f.write(rest) - f.close() + with open(filename, "w") as f: + f.write(line) + f.write(rest) if __name__ == '__main__': main() diff -r d478a2a5738a Tools/scripts/get-remote-certificate.py --- a/Tools/scripts/get-remote-certificate.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/scripts/get-remote-certificate.py Fri Mar 20 12:55:59 2015 +0200 @@ -29,9 +29,8 @@ def fetch_server_certificate (host, port return None else: tn = tempfile.mktemp() - fp = open(tn, "wb") - fp.write(m.group(1) + b"\n") - fp.close() + with open(tn, "wb") as fp: + fp.write(m.group(1) + b"\n") try: tn2 = (outfile or tempfile.mktemp()) status, output = subproc(r'openssl x509 -in "%s" -out "%s"' % @@ -39,9 +38,8 @@ def fetch_server_certificate (host, port if status != 0: raise RuntimeError('OpenSSL x509 failed with status %s and ' 'output: %r' % (status, output)) - fp = open(tn2, 'rb') - data = fp.read() - fp.close() + with open(tn2, 'rb') as fp: + data = fp.read() os.unlink(tn2) return data finally: @@ -49,9 +47,8 @@ def fetch_server_certificate (host, port if sys.platform.startswith("win"): tfile = tempfile.mktemp() - fp = open(tfile, "w") - fp.write("quit\n") - fp.close() + with open(tfile, "w") as fp: + fp.write("quit\n") try: status, output = subproc( 'openssl s_client -connect "%s:%s" -showcerts < "%s"' % diff -r d478a2a5738a Tools/scripts/h2py.py --- a/Tools/scripts/h2py.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/scripts/h2py.py Fri Mar 20 12:55:59 2015 +0200 @@ -69,23 +69,21 @@ def main(): sys.stdout.write('# Generated by h2py from stdin\n') process(sys.stdin, sys.stdout) else: - fp = open(filename, 'r') - outfile = os.path.basename(filename) - i = outfile.rfind('.') - if i > 0: outfile = outfile[:i] - modname = outfile.upper() - outfile = modname + '.py' - outfp = open(outfile, 'w') - outfp.write('# Generated by h2py from %s\n' % filename) - filedict = {} - for dir in searchdirs: - if filename[:len(dir)] == dir: - filedict[filename[len(dir)+1:]] = None # no '/' trailing - importable[filename[len(dir)+1:]] = modname - break - process(fp, outfp) - outfp.close() - fp.close() + with open(filename) as fp: + outfile = os.path.basename(filename) + i = outfile.rfind('.') + if i > 0: outfile = outfile[:i] + modname = outfile.upper() + outfile = modname + '.py' + with open(outfile, 'w') as outfp: + outfp.write('# Generated by h2py from %s\n' % filename) + filedict = {} + for dir in searchdirs: + if filename[:len(dir)] == dir: + filedict[filename[len(dir)+1:]] = None # no '/' trailing + importable[filename[len(dir)+1:]] = modname + break + process(fp, outfp) def pytify(body): # replace ignored patterns by spaces @@ -161,9 +159,10 @@ def process(fp, outfp, env = {}): except IOError: pass if inclfp: - outfp.write( - '\n# Included from %s\n' % filename) - process(inclfp, outfp, env) + with inclfp: + outfp.write( + '\n# Included from %s\n' % filename) + process(inclfp, outfp, env) else: sys.stderr.write('Warning - could not find file %s\n' % filename) diff -r d478a2a5738a Tools/scripts/ifdef.py --- a/Tools/scripts/ifdef.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/scripts/ifdef.py Fri Mar 20 12:55:59 2015 +0200 @@ -45,9 +45,8 @@ def main(): if filename == '-': process(sys.stdin, sys.stdout) else: - f = open(filename, 'r') - process(f, sys.stdout) - f.close() + with open(filename) as f: + process(f, sys.stdout) def process(fpi, fpo): keywords = ('if', 'ifdef', 'ifndef', 'else', 'endif') diff -r d478a2a5738a Tools/scripts/md5sum.py --- a/Tools/scripts/md5sum.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/scripts/md5sum.py Fri Mar 20 12:55:59 2015 +0200 @@ -47,10 +47,10 @@ def printsum(filename, out=sys.stdout): except IOError as msg: sys.stderr.write('%s: Can\'t open: %s\n' % (filename, msg)) return 1 - if fnfilter: - filename = fnfilter(filename) - sts = printsumfp(fp, filename, out) - fp.close() + with fp: + if fnfilter: + filename = fnfilter(filename) + sts = printsumfp(fp, filename, out) return sts def printsumfp(fp, filename, out=sys.stdout): diff -r d478a2a5738a Tools/scripts/mkreal.py --- a/Tools/scripts/mkreal.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/scripts/mkreal.py Fri Mar 20 12:55:59 2015 +0200 @@ -18,14 +18,13 @@ def mkrealfile(name): st = os.stat(name) # Get the mode mode = S_IMODE(st[ST_MODE]) linkto = os.readlink(name) # Make sure again it's a symlink - f_in = open(name, 'r') # This ensures it's a file - os.unlink(name) - f_out = open(name, 'w') - while 1: - buf = f_in.read(BUFSIZE) - if not buf: break - f_out.write(buf) - del f_out # Flush data to disk before changing mode + with open(name, 'rb') as f_in: # This ensures it's a file + os.unlink(name) + with open(name, 'wb') as f_out: + while 1: + buf = f_in.read(BUFSIZE) + if not buf: break + f_out.write(buf) os.chmod(name, mode) def mkrealdir(name): diff -r d478a2a5738a Tools/scripts/nm2def.py --- a/Tools/scripts/nm2def.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/scripts/nm2def.py Fri Mar 20 12:55:59 2015 +0200 @@ -42,7 +42,8 @@ NM = 'nm -p -g %s' def symbols(lib=PYTHONLIB,types=('T','C','D')): - lines = os.popen(NM % lib).readlines() + with os.popen(NM % lib) as pipe: + lines = pipe.readlines() lines = [s.strip() for s in lines] symbols = {} for line in lines: @@ -97,7 +98,7 @@ def main(): exports = export_list(s) f = sys.stdout # open('PC/python_nt.def','w') f.write(DEF_TEMPLATE % (exports)) - f.close() + # f.close() if __name__ == '__main__': main() diff -r d478a2a5738a Tools/scripts/objgraph.py --- a/Tools/scripts/objgraph.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/scripts/objgraph.py Fri Mar 20 12:55:59 2015 +0200 @@ -180,7 +180,8 @@ def main(): if filename == '-': readinput(sys.stdin) else: - readinput(open(filename, 'r')) + with open(filename) as f: + readinput(f) # warndups() # diff -r d478a2a5738a Tools/scripts/parseentities.py --- a/Tools/scripts/parseentities.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/scripts/parseentities.py Fri Mar 20 12:55:59 2015 +0200 @@ -50,13 +50,15 @@ def writefile(f,defs): if __name__ == '__main__': if len(sys.argv) > 1: - infile = open(sys.argv[1]) + with open(sys.argv[1]) as infile: + text = infile.read() else: - infile = sys.stdin + text = sys.stdin.read() + + defs = parse(text) + if len(sys.argv) > 2: - outfile = open(sys.argv[2],'w') + with open(sys.argv[2],'w') as outfile: + writefile(outfile, defs) else: - outfile = sys.stdout - text = infile.read() - defs = parse(text) - writefile(outfile,defs) + writefile(sys.stdout, defs) diff -r d478a2a5738a Tools/scripts/pathfix.py --- a/Tools/scripts/pathfix.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/scripts/pathfix.py Fri Mar 20 12:55:59 2015 +0200 @@ -97,29 +97,27 @@ def fix(filename): except IOError as msg: err('%s: cannot open: %r\n' % (filename, msg)) return 1 - line = f.readline() - fixed = fixline(line) - if line == fixed: - rep(filename+': no change\n') - f.close() - return - head, tail = os.path.split(filename) - tempname = os.path.join(head, '@' + tail) - try: - g = open(tempname, 'wb') - except IOError as msg: - f.close() - err('%s: cannot create: %r\n' % (tempname, msg)) - return 1 - rep(filename + ': updating\n') - g.write(fixed) - BUFSIZE = 8*1024 - while 1: - buf = f.read(BUFSIZE) - if not buf: break - g.write(buf) - g.close() - f.close() + with f: + line = f.readline() + fixed = fixline(line) + if line == fixed: + rep(filename+': no change\n') + return + head, tail = os.path.split(filename) + tempname = os.path.join(head, '@' + tail) + try: + g = open(tempname, 'wb') + except IOError as msg: + err('%s: cannot create: %r\n' % (tempname, msg)) + return 1 + with g: + rep(filename + ': updating\n') + g.write(fixed) + BUFSIZE = 8*1024 + while 1: + buf = f.read(BUFSIZE) + if not buf: break + g.write(buf) # Finishing touch -- move files diff -r d478a2a5738a Tools/scripts/pdeps.py --- a/Tools/scripts/pdeps.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/scripts/pdeps.py Fri Mar 20 12:55:59 2015 +0200 @@ -64,29 +64,28 @@ m_from = re.compile('^[ \t]*import[ \t]+ # Collect data from one file # def process(filename, table): - fp = open(filename, 'r') - mod = os.path.basename(filename) - if mod[-3:] == '.py': - mod = mod[:-3] - table[mod] = list = [] - while 1: - line = fp.readline() - if not line: break - while line[-1:] == '\\': - nextline = fp.readline() - if not nextline: break - line = line[:-1] + nextline - m_found = m_import.match(line) or m_from.match(line) - if m_found: - (a, b), (a1, b1) = m_found.regs[:2] - else: continue - words = line[a1:b1].split(',') - # print '#', line, words - for word in words: - word = word.strip() - if word not in list: - list.append(word) - fp.close() + with open(filename) as fp: + mod = os.path.basename(filename) + if mod[-3:] == '.py': + mod = mod[:-3] + table[mod] = list = [] + while 1: + line = fp.readline() + if not line: break + while line[-1:] == '\\': + nextline = fp.readline() + if not nextline: break + line = line[:-1] + nextline + m_found = m_import.match(line) or m_from.match(line) + if m_found: + (a, b), (a1, b1) = m_found.regs[:2] + else: continue + words = line[a1:b1].split(',') + # print '#', line, words + for word in words: + word = word.strip() + if word not in list: + list.append(word) # Compute closure (this is in fact totally general) diff -r d478a2a5738a Tools/scripts/ptags.py --- a/Tools/scripts/ptags.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/scripts/ptags.py Fri Mar 20 12:55:59 2015 +0200 @@ -19,9 +19,9 @@ def main(): for filename in args: treat_file(filename) if tags: - fp = open('tags', 'w') - tags.sort() - for s in tags: fp.write(s) + with open('tags', 'w') as fp: + tags.sort() + for s in tags: fp.write(s) expr = '^[ \t]*(def|class)[ \t]+([a-zA-Z0-9_]+)[ \t]*[:\(]' @@ -33,21 +33,22 @@ def treat_file(filename): except: sys.stderr.write('Cannot open %s\n' % filename) return - base = os.path.basename(filename) - if base[-3:] == '.py': - base = base[:-3] - s = base + '\t' + filename + '\t' + '1\n' - tags.append(s) - while 1: - line = fp.readline() - if not line: - break - m = matcher.match(line) - if m: - content = m.group(0) - name = m.group(2) - s = name + '\t' + filename + '\t/^' + content + '/\n' - tags.append(s) + with fp: + base = os.path.basename(filename) + if base[-3:] == '.py': + base = base[:-3] + s = base + '\t' + filename + '\t' + '1\n' + tags.append(s) + while 1: + line = fp.readline() + if not line: + break + m = matcher.match(line) + if m: + content = m.group(0) + name = m.group(2) + s = name + '\t' + filename + '\t/^' + content + '/\n' + tags.append(s) if __name__ == '__main__': main() diff -r d478a2a5738a Tools/scripts/rgrep.py --- a/Tools/scripts/rgrep.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/scripts/rgrep.py Fri Mar 20 12:55:59 2015 +0200 @@ -30,29 +30,30 @@ def main(): f = open(filename) except IOError as msg: usage("can't open %r: %s" % (filename, msg), 1) - f.seek(0, 2) - pos = f.tell() - leftover = None - while pos > 0: - size = min(pos, bufsize) - pos = pos - size - f.seek(pos) - buffer = f.read(size) - lines = buffer.split("\n") - del buffer - if leftover is None: - if not lines[-1]: - del lines[-1] - else: - lines[-1] = lines[-1] + leftover - if pos > 0: - leftover = lines[0] - del lines[0] - else: - leftover = None - for line in reversed(lines): - if prog.search(line): - print(line) + with f: + f.seek(0, 2) + pos = f.tell() + leftover = None + while pos > 0: + size = min(pos, bufsize) + pos = pos - size + f.seek(pos) + buffer = f.read(size) + lines = buffer.split("\n") + del buffer + if leftover is None: + if not lines[-1]: + del lines[-1] + else: + lines[-1] = lines[-1] + leftover + if pos > 0: + leftover = lines[0] + del lines[0] + else: + leftover = None + for line in reversed(lines): + if prog.search(line): + print(line) def usage(msg, code=2): diff -r d478a2a5738a Tools/scripts/svneol.py --- a/Tools/scripts/svneol.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/scripts/svneol.py Fri Mar 20 12:55:59 2015 +0200 @@ -39,7 +39,8 @@ import subprocess def propfiles(root, fn): default = os.path.join(root, ".svn", "props", fn + ".svn-work") try: - format = int(open(os.path.join(root, ".svn", "format")).read().strip()) + with open(os.path.join(root, ".svn", "format")) as f: + format = int(f.read().strip()) except IOError: return [] if format in (8, 9): @@ -60,27 +61,27 @@ def proplist(root, fn): # no properties file: not under version control, # or no properties set continue - while True: - # key-value pairs, of the form - # K - # NL - # V length - # NL - # END - line = f.readline() - if line.startswith("END"): - break - assert line.startswith("K ") - L = int(line.split()[1]) - key = f.read(L) - result.append(key) - f.readline() - line = f.readline() - assert line.startswith("V ") - L = int(line.split()[1]) - value = f.read(L) - f.readline() - f.close() + with f: + while True: + # key-value pairs, of the form + # K + # NL + # V length + # NL + # END + line = f.readline() + if line.startswith("END"): + break + assert line.startswith("K ") + L = int(line.split()[1]) + key = f.read(L) + result.append(key) + f.readline() + line = f.readline() + assert line.startswith("V ") + L = int(line.split()[1]) + value = f.read(L) + f.readline() return result diff -r d478a2a5738a Tools/unicode/gencjkcodecs.py --- a/Tools/unicode/gencjkcodecs.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/unicode/gencjkcodecs.py Fri Mar 20 12:55:59 2015 +0200 @@ -61,7 +61,8 @@ def gencodecs(prefix): encoding=enc.lower(), owner=loc) codecpath = os.path.join(prefix, enc + '.py') - open(codecpath, 'w').write(code) + with open(codecpath, 'w') as f: + f.write(code) if __name__ == '__main__': import sys diff -r d478a2a5738a Tools/unicode/gencodec.py --- a/Tools/unicode/gencodec.py Fri Mar 20 10:37:34 2015 +0100 +++ b/Tools/unicode/gencodec.py Fri Mar 20 12:55:59 2015 +0200 @@ -72,9 +72,8 @@ def parsecodes(codes, len=len, range=ran def readmap(filename): - f = open(filename,'r') - lines = f.readlines() - f.close() + with open(filename) as f: + lines = f.readlines() enc2uni = {} identity = [] unmapped = list(range(256)) @@ -359,18 +358,16 @@ encoding_table = codecs.charmap_build(de def pymap(name,map,pyfile,encodingname,comments=1): code = codegen(name,map,encodingname,comments) - f = open(pyfile,'w') - f.write(code) - f.close() + with open(pyfile,'w') as f: + f.write(code) def marshalmap(name,map,marshalfile): d = {} for e,(u,c) in map.items(): d[e] = (u,c) - f = open(marshalfile,'wb') - marshal.dump(d,f) - f.close() + with open(marshalfile,'wb') as f: + marshal.dump(d,f) def convertdir(dir, dirprefix='', nameprefix='', comments=1): @@ -411,8 +408,8 @@ def rewritepythondir(dir, dirprefix='', print('converting %s to %s' % (mapname, dirprefix + codefile)) try: - map = marshal.load(open(os.path.join(dir,mapname), - 'rb')) + with open(os.path.join(dir, mapname), 'rb') as f: + map = marshal.load(f) if not map: print('* map is empty; skipping') else: