Zitat von
Terrorist
ja, das ist erstmal "programmmäßig" gesehen erstmal auch ein Wort, da zusammengeschrieben
Wenn bei dir die Wörter in einem bestimmten Format vorkommen, musst du es auch sagen
. Also z.B wenn ein Trennzeichen wie ":" oder " " (Leerzeichen) genutzt wird (das kann man ja auch übergeben lassen).
Dieses Script dürfte allgemein funktionieren:
Code:
import sys
def file_to_lines(name):
with open(name, 'r') as f:
result = f.read()
return result.splitlines()
def main():
try:
text = file_to_lines(sys.argv[1])
words = file_to_lines(sys.argv[2])
result = []
for line in text:
for word in words:
if line.find(word)>-1:
result.append(line)
break #ein Fund pro Zeile reicht
with open(sys.argv[3],'w') as f:
f.write('\n'.join(result))
except IOError:
print "Aufruf:\n",\
"filediff.py original.txt words.txt result.txt\n"
main()
Sucht, ob ein Wort in der Zeile vorkommt (allerdings auch als "Subwort" bzw. als Bestandteil eines Worts). D.h es findet bei der Suche nach "lol" im
Text:
Code:
lol:hallo
lolcat:hey
helol:zeile
alle 3 Zeilen
Hier die andere Version, die nur ganze Wörter findet, aber davon ausgeht, dass diese dann mit einem Trennzeichen getrennt sind - wie z.B in deinem Beispiel "lol:lal" mit ":"
Code:
iimport sys
def file_to_lines(name):
with open(name, 'r') as f:
result = f.read()
return result.splitlines()
def main():
try:
text = file_to_lines(sys.argv[1])
words = file_to_lines(sys.argv[2])
result = []
if len(sys.argv)>4:
separator = sys.argv[4]
else:
separator = ":"
for line in text:
for word in words:
if word in line.split(separator):
result.append(line)
break #es reicht, wenn ein Wort in der Zeile vorkommt
with open(sys.argv[3],'w') as f:
f.write('\n'.join(result))
except IOError:
print "Aufruf:\n",\
"filediff.py original.txt words.txt result.txt separator\n"
main()
Funktioniert wie bis jetzt, nur dass du hier noch das Trennzeichen mit eingeben kannst:
Code:
filediff.py original.txt gefiltert.txt ergebnis.txt _trennzeichen_
für Trennzeichen dann : oder . oder " " (Leerzeichen - muss in " " stehen) - also das jeweilige Trennzeichen angeben.
Es können auch mehrere Zeichen sein wie ":-:" oder wonach die Daten auch immer getrennt sind. Wird kein Trennzeichen angegeben, nimmt das Script ":" als Defaultwert.
Edit/PS: beide Scripte sind jetzt so gebaut, dass eine Zeile höchstens ein mal im Ergebnis vorkommt (auch wenn da z.B mehrere Wörter drauf treffen) - falls es nicht so erwünscht ist, einfach das "break" in
Code:
break #ein Fund pro Zeile reicht
löschen.