从列表中替换字符串中的字符并为每个字符创建一个副本

时间:2016-10-19 07:25:39

标签: python string replace sed

我不确定是否可以用sed做我需要的事。

我希望能够用列表中的另一个字符串替换文件中的字符串,并为每个版本创建一个单独的副本。

例如,原始文件包含:

dog

我想用不同单词列表替换apple dog orange。即猫,兔子,鸭子。 这将创建原始文件的副本,每个副本都有不同的更改。

File1.txt(原始文件) - apple cat orange File2.txt - apple rabbit orange File3.txt - apple duck orange File4.txt - sed -i '' 's/dog/cat/g' *.html

我已经能够使用Sed来查找和替换单个文件:

lessc-each

我需要一种从列表中替换的方法,并为每个列表创建一个唯一的副本。

我在OSX上。正如我之前所说,sed可能不是这里使用的工具,也许是Python?我愿意接受任何建议。

由于

3 个答案:

答案 0 :(得分:2)

你可以使用正则表达式使用python做到这一点。

import re
import os

filename = '/path/to/filename.txt'
with open(filename, 'r') as f:
    text = f.read()

names = ['cat', 'rabbit', 'duck']
for i, name in enumerate(names):
    new_text = re.sub(r'dog', name, text)
    base, ext = os.path.splitext(filename)
    with open('{}_{}{}'.format(base, i, ext), 'w') as f:
        f.write(new_text)

答案 1 :(得分:1)

您可以使用正则表达式

import re

in_file = 'File1.txt'
out_file = 'File2.txt'
with open(filename, 'r') as in_f:
    s = f.read() # Reads whole file. Be careful for large files
    s = re.sub('dog', 'cat', s)
    with open(out_file, 'w') as out_f:
        f.write(s)

您可以将整个内容放在for循环中,以根据需要进行多次替换

答案 2 :(得分:1)

你可以简单地使用字符串替换方法

import string
f = open("file1")
text = f.read()
list_of_words = ['cat','rabbit','duck']
num =2
for word in list_of_words:
    new_text = string.replace(text,"dog",word,1)
    f_new = open("file"+str(num),"w")
    f_new.write(new_text)
    f_new.close()
    num +=1

输入: 文件1

apple dog orange

输出:file2:

apple cat orange

输出:file3:

apple rabbit orange

输出:file4:

apple duck orange