试图从一个巨大的文件中查找字符串并将结果替换为另一个字符串

时间:2017-07-08 17:51:59

标签: python regex

以下是我的代码 -

import tarfile
import os
import sys
import re

script, bak = sys.argv
bakfile = str(bak)
currentwd = os.path.dirname(os.path.realpath(__file__))
file_to_work = tarfile.open(name=currentwd+"/"+bakfile, mode="r")
file_to_work.extractall()

currentwd = os.path.dirname(os.path.realpath(__file__))
with open(currentwd+"/onedb.xml", "r") as file:
    f = file.read()
    words = re.findall(r'{ssha}_\w*?=', f)
    re.sub(words,r'string_to_replace',f)

我使用了tarfile模块并从提取的文件中提取了一个gzfile,并选择了onedb.xml。使用正则表达式查找字符串并且成功。

现在,当我尝试使用re.sub替换搜索到的字符串时,我收到以下错误。

Traceback (most recent call last):
  File "preset.py", line 16, in <module>
    re.sub(words,r'string_to_replace',f)
  File "/usr/lib/python2.7/re.py", line 151, in sub
    return _compile(pattern, flags).sub(repl, string, count)
  File "/usr/lib/python2.7/re.py", line 232, in _compile
    p = _cache.get(cachekey)
TypeError: unhashable type: 'list'

1 个答案:

答案 0 :(得分:0)

在一个表达式中使用all:

re.sub(r'{ssha}_\w*?=', r'string_to_replace', f)