DataSmash a écrit : > Hello, > I need to search and replace 4 words in a text file. > Below is my attempt at it, but this code appends > a copy of the text file within itself 4 times. > Can someone help me out. > Thanks! > > # Search & Replace > file = open("text.txt", "r") NB : avoid using 'file' as an identifier - it shadows the builtin 'file' type.
> text = file.read() > file.close() > > file = open("text.txt", "w") > file.write(text.replace("Left_RefAddr", "FromLeft")) > file.write(text.replace("Left_NonRefAddr", "ToLeft")) > file.write(text.replace("Right_RefAddr", "FromRight")) > file.write(text.replace("Right_NonRefAddr", "ToRight")) > file.close() > See Mark and Tim's answers for your bug. Another (potential) problem with your code is that it may not work too well for big files. It's ok if you know that the files content will always be small enough to not eat all memory. Else, taking a "line by line" approach is the canonical solution : def simplesed(src, dest, *replacements): for line in src: for target, repl in replacements: line = line.replace(target, repl) dest.write(line) replacements = [ ("Left_RefAddr", "FromLeft"), ("Left_NonRefAddr", "ToLeft"), ("Right_RefAddr", "FromRight"), ("Right_NonRefAddr", "ToRight"), ] src = open("hugetext.txt", "r") dest = open("some-temp-name.txt", "w") simplesed(src, dest, *replacements) src.close() dest.close() os.rename("some-temp-name.txt", "hugetext.txt") HTH -- http://mail.python.org/mailman/listinfo/python-list