如何在编码的markdown文件中查找和替换?

时间:2017-11-17 00:53:26

标签: python python-requests

我有一个从github中提取markdown文件的脚本。然后我解码文件查找和替换该文件中的参数与用户给定的输入。

tempdict = {'key_1': 'input_1', 'key 2','input_2'}

它很有效,直到我意识到它缺少一些实例。我意识到文本是以256字节大小的块读取的,如果我的'key'在这个块的末尾,那么它将在rawtext的不同行上,我的find和replace函数会错过它。我怎样才能避免这个错误?

以下代码:

url = 'https://raw.githubusercontent.com/foo/documents/master/bar.md'
rawtext = requests.get(fullurl)

rep = {}
for k,v in tempdict.items():
    rep[k.replace('_','\\_')]=v

decodedtext = []
for line in rawtext:
    decodedtext.append(line.decode("utf-8"))

editedtext = []
rep = dict((re.escape(k),v) for k,v in rep.items())

pattern = re.compile('|'.join(rep.keys()))
for line in decodedtext:
    line = pattern.sub(lambda m: rep[re.escape(m.group(0))],line)
    editedtext.append(line)


encodedtext =[]
for line in editedtext:
    encodedtext.append(str.encode(line))

markdownfile = open('edited.md','wb')
for i in encodedtext:
    markdownfile.write(i)
markdownfile.close()

下面的Psuedo-Markdown文件。

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus pharetra, 
urna ullamcorper congue aliquet, leo nulla facilisis ipsum, tincidunt 
suscipit eros erat tempor orci. Sed porttitor convallis ligula, a pharetra 
nisl rhoncus sit key_1. Maecenas consequat sem nec urna mattis, non ornare 
risus fermentum. Nam consectetur volutpat felis sed blandit. Etiam eu 
sollicitudin diam, eu euismod diam. Fusce diam libero, sagittis varius elit 
nec, ultricies key_2 est. Sed nibh purus, tincidunt eu fringilla ut, 
ultrices et orci.

我尝试使用rawtext.textrawtext.iter_items()的任何时候都不会保留降价格式。另外,我将tempdict中的项目替换为rep,因为rawtext会在每个下划线之前添加\\

1 个答案:

答案 0 :(得分:0)

您的问题是您正在检查列表的每个部分是否匹配,这意味着如果匹配部分位于2个列表条目中,则它将不匹配。不是创建列表,而是创建1个字符串,将其拆分为新行(假设您没有尝试匹配任何新行)并对新列表执行检查。

Z