On Sun, 29 Nov 2015 13:36:57 -0800, Mr Zaug wrote:

> result = re.sub(pattern, repl, string, count=0, flags=0);

re.sub works on a string, not on a file.

Read the file to a string, pass it in as the string.

Or pre-compile the search pattern(s) and process the file line by line:

import re

patts = [
 (re.compile("axe"), "hammer"),
 (re.compile("cat"), "dog"),
 (re.compile("tree"), "fence")
 ]

with open("input.txt","r") as inf, open("output.txt","w") as ouf:
    line = inf.readline()
    for patt in patts:
        line = patt[0].sub(patt[1], line)
    ouf.write(line)

Not tested, but I think it should do the trick.

Or use a single patt and a replacement func:

import re

patt = re.compile("(axe)|(cat)|(tree)")

def replfunc(match):
    if match == 'axe':
        return 'hammer'
    if match == 'cat':
        return 'dog'
    if match == 'tree':
        return 'fence'
    return match

with open("input.txt","r") as inf, open("output.txt","w") as ouf:
    line = inf.readline()
    line = patt.sub(replfunc, line)
    ouf.write(line)

(also not tested)

-- 
Denis McMahon, denismfmcma...@gmail.com
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to