我是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
没有正确执行。你能告诉我为什么吗?你知道吗
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)
来解决问题。你知道吗没有
inplace=1
你必须自己做-从oryginal文件中读取所有行,将所有行写入临时文件,最后用临时文件替换oryginal文件。你知道吗相关问题 更多 >
编程相关推荐