Unten ist mein Code ersetzen -Versuch Strings aus einer riesigen Datei zu finden und das Ergebnis mit einem anderen String
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)
I verwendet tarfile
Modul und ein gzfile extrahierte, aus den extrahierten Dateien, nahm onedb.xml. Benutzte Regex, um die Zeichenfolgen zu finden, und das war erfolgreich.
Jetzt, wenn ich versuche, gesuchte Zeichenfolgen mit re.sub
zu ersetzen, erhalte ich den folgenden Fehler.
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'
'words = re.findall (r '{SSHA} _ \ w * =?', F)' 'gibt eine Python list'. Sie übergeben diese "Liste" an die Funktion "re" als Muster. Das führt zwangsläufig zu Fehlern. – Abdou
@Abdou, dank dir. Irgendwelche Vorschläge, um das zu beheben? –
Ich bin nicht ganz sicher, was Sie ersetzen möchten, aber wenn Sie versuchen, alle Elemente von 'words' zu ersetzen, dann können Sie versuchen:' re ('|' .join (words), r'string_to_replace ', f) ". – Abdou