ich möchte eine große Wordlist (mehrere GB) nach einem Wort durchsuchen lassen und
die Treffer mit der Zeilennummer ausgeben. Außerdem die Wörter in der Zeile davor und danach.
Ich habe als Python-Neuling folgenden Code zusammengeschnibbelt, der sogar funktioniert.
Leider funktioniert es nur bei Wordlists unter einem GB. Bei größeren Wordlist kommt "Memory Error".
Ich habe schon rausgefunden, dass das Problem bei "x = f.readlines()" steckt, da hier die gesamte Datei
eingelesen wird, richtig? In einem Forum habe ich gefunden, dass man lieber mit "for line in f" arbeiten sollte.
Bei der Umsetzung komme ich aber nicht weiter. Kann jemand helfen?
Code: Alles auswählen
import argparse
ap = argparse.ArgumentParser()
ap.add_argument("-outfile", "--outfile", required=True, help="Txt-File")
ap.add_argument("-infile", "--infile", required=True, help="Txt-File")
ap.add_argument("-insearch", "--insearch", required=True, help="Txt-File")
args = vars(ap.parse_args())
outfile = args["outfile"]
infile = args["infile"]
insearch = args["insearch"]
with open(outfile, 'w', errors='ignore', encoding='utf-8') as text_file:
with open(infile,errors='ignore', encoding='utf-8') as f:
x = f.readlines()
for num, line in enumerate(x,1):
if insearch in line:
text_file.write("Line: " + str(num) + " found: " + line)
text_file.write("Line before: " + str(x[num-2]))
text_file.write("Line next: " + str(x[num]) + "\n")
text_file.close()
f.close()