Python 如何将文件中的字符串从列表更改为字符串

Python 如何将文件中的字符串从列表更改为字符串,python,string,file,list,Python,String,File,List,我对Python编程非常陌生,在用存储在列表中的字符串更改文本文件中的特定字符串时,我遇到了一个棘手的问题 我正在处理媒体维基文档-将它们从.doc转换为维基代码。转换后,所有图像都被标记[[Media:]]替换-我想用列表中存储的图片名称替换所有[[Media:]]标记。例如,在转换的文档中,将有5个[[Media:]]标记,这意味着我有如下列表: li = ["image1.jpg", "image2.jpg", "image3.jpg", "image4.jpg"] >>&g

我对Python编程非常陌生,在用存储在列表中的字符串更改文本文件中的特定字符串时,我遇到了一个棘手的问题

我正在处理媒体维基文档-将它们从.doc转换为维基代码。转换后,所有图像都被标记[[Media:]]替换-我想用列表中存储的图片名称替换所有[[Media:]]标记。例如,在转换的文档中,将有5个[[Media:]]标记,这意味着我有如下列表:

li = ["image1.jpg", "image2.jpg", "image3.jpg", "image4.jpg"]
>>> interleave(s, "[[Media:]]", li)
'a tag image1.jpg  - I want to replace all image2.jpg  tags with a names of pictures stored in a list. For example in a converted document there will be 5 image3.jpg  tags d by a tag image4.jpg  - I want to replace all image5.jpg  tags'
我想将文档中的第一个标记更改为bo,并用image1.jpg替换,在文档中找到的第二个标记为image2.jpg,依此类推

这是一段代码,但我不知道如何通过列表进行迭代

li = ["image1.jpg ", "image2.jpg ", "image3.jpg ", "image4.jpg ", "image5.jpg "]
a = 0

src = open('sap.txt').readlines()
dest = open('cel.txt', 'w')

for s in src:
    a += 1
    dest.write(s.replace("[[Media:]]", li[a]))
dest.close()

我将非常感谢您的帮助

一种简单但不是很有效的方法是一次更换一个标签:

>>> li = ["image1.jpg", "image2.jpg", "image3.jpg", "image4.jpg"]
>>> s = "a tag [[Media:]] - I want to replace all [[Media:]] tags with a names of pictures stored in a list. For example in a converted document there will be 5 [[Media:]] tags d by a tag [[Media:]] - I want to replace all [[Media:]] tags"
>>> for item in li:
...    s = s.replace("[[Media:]]", item, 1)  # max. 1 replace per call
...
>>> s
'a tag image1.jpg  - I want to replace all image2.jpg  tags with a names of pictures stored in a list. For example in a converted document there will be 5 image3.jpg  tags d by a tag image4.jpg  - I want to replace all image5.jpg  tags'
更好的方法是一次性构造字符串:

def interleave(original, tag, replacements):
    items = original.split(tag)
    return "".join((text+repl for text,repl in zip(items, replacements+[""])))
像这样使用它:

li = ["image1.jpg", "image2.jpg", "image3.jpg", "image4.jpg"]
>>> interleave(s, "[[Media:]]", li)
'a tag image1.jpg  - I want to replace all image2.jpg  tags with a names of pictures stored in a list. For example in a converted document there will be 5 image3.jpg  tags d by a tag image4.jpg  - I want to replace all image5.jpg  tags'

如果以后不需要使用
li
,可以执行以下操作:

li.reverse()
with open('sap.txt') as src:
    with open('cel.txt', 'w') as dest:
        for line in src:
            while "[[Media:]]" in line:
                line = line.replace("[[Media:]]", li.pop(), 1)
            dest.write(line)
当然,如果文件中包含的
“[[Media:]]”
实例比
len(li)
实例多,则会出现
索引器


另外,如果你使用
re
,你可以用
line=re.sub(\[\[Media:\]\]”,lambda m:li.pop(),line)替换while循环

你能给我们看一下
sap.txt
中的数据样本吗嗨,问题已经解决了,但你肯定会看到:“'Ikona'”风格=“边界顶部:无;边框底部:0.75磅实心#000000;左边界:无;边界权:无;垫面:0厘米;垫底:0厘米;左侧填充:0.191cm;右侧填充:0.191cm;“|”“Znaczenie”“”——|style=“border:无;垫面:0厘米;垫底:0厘米;左侧填充:0.191cm;右侧填充:0.191cm;“|[[Image:]|style=“border:无;垫面:0厘米;垫底:0厘米;填充物-