用Pythonreplace文件中的文本

我是Python新手。 我希望能够打开一个文件,并通过Pythonreplace给定replace的某些单词的每个实例。 举个例子,用'0'replace'零',用'bob'代替'temp',用'nothing'来代替'garbage'。

我刚开始使用这个:

for line in fileinput.input(fin): fout.write(line.replace('zero', '0')) fout.write(line.replace('temp','bob')) fout.write(line.replace('garbage','nothing')) 

但我不认为这是一个甚至是远程正确的方式来做到这一点。 然后,我想了解if语句来检查这行代码是否包含这些内容,如果是这样,那么replace这行代码中的哪一行,但是从我所了解的Python来看,这也不是一个真正理想的解决scheme。 我很想知道什么是最好的方法来做到这一点。 谢谢提前!

这应该做到这一点

 replacements = {'zero':'0', 'temp':'bob', 'garbage':'nothing'} with open('path/to/input/file') as infile, open('path/to/output/file', 'w') as outfile: for line in infile: for src, target in replacements.iteritems(): line = line.replace(src, target) outfile.write(line) 

编辑 :要解决Eildosa的评论 ,如果你想这样做,而不写入另一个文件,那么你最终将不得不读取你的整个源文件到内存中:

 lines = [] with open('path/to/input/file') as infile: for line in infile: for src, target in replacements.iteritems(): line = line.replace(src, target) lines.append(line) with open('path/to/input/file', 'w') as outfile: for line in lines: outfile.write(line) 

编辑:如果您使用Python 3.x,请使用replacements.items()而不是replacements.iteritems()

我可能会考虑使用一个dictre.sub的东西:

 import re repldict = {'zero':'0', 'one':'1' ,'temp':'bob','garage':'nothing'} def replfunc(match): return repldict[match.group(0)] regex = re.compile('|'.join(re.escape(x) for x in repldict)) with open('file.txt') as fin, open('fout.txt','w') as fout: for line in fin: fout.write(regex.sub(replfunc,line)) 

replace了一个轻微的优势,它是重叠比赛更强大一点。

如果你的文件很短(甚至不是很长),你可以使用下面的代码来replace文本:

 # Replace variables in file with open('path/to/in-out-file', 'r+') as f: content = f.read() f.seek(0) f.truncate() f.write(content.replace('replace this', 'with this')) 

基本的方法是

  • read()
  • data = data.replace()就像你需要的那样
  • write()

如果您一次读取或写入整个数据,或者更小的部分由您决定。 您应该使其取决于预期的文件大小。

read()可以replace为对文件对象的迭代。

更快的方式写它将是…

 in = open('path/to/input/file').read() out = open('path/to/input/file', 'w') replacements = {'zero':'0', 'temp':'bob', 'garbage':'nothing'} for i in replacements.keys(): in = in.replace(i, replacements[i]) out.write(in) out.close 

这消除了其他答案所提出的许多迭代,并且将加速更长文件的处理。

从标准input中读取,写入'code.py'如下:

 import sys rep = {'zero':'0', 'temp':'bob', 'garbage':'nothing'} for line in sys.stdin: for k, v in rep.iteritems(): line = line.replace(k, v) print line 

然后,使用redirect或pipe道执行脚本( http://en.wikipedia.org/wiki/Redirection_(computing); )

 python code.py < infile > outfile 

这是我刚刚使用的一个简短而简单的例子:

如果:

 fp = open("file.txt", "w") 

然后:

 fp.write(line.replace('is', 'now')) // "This is me" becomes "This now me" 

不:

 line.replace('is', 'now') fp.write(line) // "This is me" not changed while writing