Python遍历字典替换字符串

2024-04-25 14:04:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手。你知道吗

我必须在目录中搜索并找到包含字符串kyle和john的文件,然后分别用mike和jim替换它们。每个文件可以有凯尔或约翰或两者。你知道吗

这是我的密码

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)

现在我已经创建了一个测试文件夹,其中包含示例.txt,在示例.txt我有凯尔这个词。但当我运行程序时,文件没有内容,甚至凯尔也不在那里。 你能告诉我我做错了什么吗。我想问题出在我的替换功能上。在行中if searchExp in line没有正确执行。你能告诉我为什么吗?你知道吗


Tags: 文件inimportforossyslinejohn
2条回答

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

你必须写下所有的行-不仅仅是因为fileinput.input()(使用inplace=1)将文本复制到临时文件以读取其中的行并清除原始文件以再次写下所有的行-但是你必须自己写下所有的行。你知道吗

您可以按如下所示移动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文件。你知道吗

相关问题 更多 >