Python迭代字典替换字符串

时间:2013-10-28 09:11:49

标签: python dictionary

我是python的新手。

我必须搜索目录并找到其中包含字符串kyle和john的文件,并分别用mike和jim替换它们。每个文件都可以包含kyle或john或两者。

这是我的代码

import os
import fileinput
import sys

rootdir ='C:/Users/sid/Desktop/test'
searchTerms = {"kyle":"mike","john":"jim"}
#old= "kyle"
#new = "mike"

def replaceAll(file,searchExp,replaceExp):
    for line in fileinput.input(file, inplace=1):
        if searchExp in line:
            line = line.replace(searchExp,replaceExp)
            sys.stdout.write(line)

for subdir, dirs, files in os.walk(rootdir):
    for file in files:
            path=subdir+'/'+file
            for oldline, newline in searchTerms.items():
                replaceAll(path,oldline,newline)

现在我已经创建了一个测试文件夹,其中包含sample.txt,在sample.txt中我有单词kyle。但是当我运行程序时,文件没有内容,甚至凯尔也不在那里。 你能告诉我我做错了什么吗?我认为问题出在我的replaceAll函数中。在行if searchExp in line中没有正确执行。你能告诉我为什么吗?

2 个答案:

答案 0 :(得分:1)

fileinput.input(file, inplace=1)被称为in-place filtering

例如

sample.txt有一行kyle kyle kyle

在第一步中,行kyle kyle kyle被处理为mike mike mike

然后,行mike mike mike将被视为新的输入行。

新行中没有“kyle”或“john”,因此不会将任何输出写入sample.txt


参考:http://docs.python.org/2/library/fileinput.html#fileinput.FileInput

答案 1 :(得分:1)

您必须编写所有行 - 不仅包括更改,因为fileinput.input()(带有inplace=1)将文本复制到temporaty文件以从中读取行并清除oryginal文件以再次写入所有行 - 但是您必须自己写所有的行。

您可以按照以下方式移动sys.stdout.write(line)来解决问题。

def replaceAll(file,searchExp,replaceExp):
    for line in fileinput.input(file, inplace=1):
        if searchExp in line:
            line = line.replace(searchExp,replaceExp)
        sys.stdout.write(line)

没有inplace=1你必须自己做 - 从oryginal文件中读取所有行,将所有行写入临时文件,最后用临时文件替换oryginal文件。

相关问题