Seite 1 von 1
Textdatei durchsuchen und bestimmte Sachen speichern
Verfasst: Samstag 2. Mai 2020, 09:59
von Python-Nichtskönner
Ich möchte in Python aus einer Text Datei nur eine bestimmte Sache speichern. Ich habe zufallsgenerierte 100000 Kombination bestehend aus 4 Buchstaben in der Textdatei gespeichert. Nun will ich aus diesen 100000 Kombination nur diese speichern, bei denen 3 gleiche Kombinationen aufeinander folgen... Also z.B. möchte ich nur ..., ABBA, ABBA, ABBA, .... CCAC, CCAC, CCAC, ... Speichern.
Re: Textdatei durchsuchen und bestimmte Sachen speichern
Verfasst: Samstag 2. Mai 2020, 10:02
von sparrow
Was hast du denn schon versucht?
Warum machst du das nicht dort, wo die Daten generiert werden, sondern schreibst erst unnötigerweise die Datei?
Re: Textdatei durchsuchen und bestimmte Sachen speichern
Verfasst: Samstag 2. Mai 2020, 10:04
von Python-Nichtskönner
sparrow hat geschrieben: Samstag 2. Mai 2020, 10:02
Was hast du denn schon versucht?
Warum machst du das nicht dort, wo die Daten generiert werden, sondern schreibst erst unnötigerweise die Datei?
Also generiert hab ich die Kombination in Python und nur abgespeichert in einer Textdatei. Ich dachte, dass ich in dem neuen Programm nun die Textdatei öffnen muss, die ich generiert hab
Re: Textdatei durchsuchen und bestimmte Sachen speichern
Verfasst: Samstag 2. Mai 2020, 10:18
von __blackjack__
@Python-Nichtskönner: Das beantwortet nicht wirklich die Frage warum Du das nicht schon beim generieren der Daten machst, also solche 3er-Gruppen aus den Daten filtern. Wobei die nächste Frage dann natürlich wäre warum überhaupt 100.000 Kombinationen generieren wenn man danach eh nur wieder welche raus filtert, warum nicht gleich nur solche 3er-Gruppen generieren?
Und jetzt sind es exakt drei gleiche Kombinationen? Im letzten Thema zum im Grunde gleichen Thema waren es noch mindestens drei statt exakt drei:
viewtopic.php?f=1&t=48468#p365957:
Python-Nichtskönner hat geschrieben:Ich will ich in einem zweiten Programm nur einen bestimmten Code speichern, bei dem mindestens einmal drei gleiche Kombinationen nebeneinander stehen. Also ...,ACCA, ACCA, ACCA, ...
Die erste Frage von sparrow hast Du auch noch nicht beantwortet: Was hast Du versucht?
Wo liegt jetzt das konkrete Problem?
Und wie soll eigentlich das Ergebnis aussehen? Sollen da jetzt wirklich Auslassungspunkte und Kommas im Ergebnis stehen? Oder nur die 3er-Gruppen durch Leerzeichen getrennt, oder…
Programmieren erfordert ein gewisses Mass an Präzision. Wenn man das Problem nicht präzise beschreiben kann, wird man in der Regel auch bei der Formulierung der Lösung Probleme haben.
Re: Textdatei durchsuchen und bestimmte Sachen speichern
Verfasst: Samstag 2. Mai 2020, 10:25
von Python-Nichtskönner
__blackjack__ hat geschrieben: Samstag 2. Mai 2020, 10:18
@Python-Nichtskönner: Das beantwortet nicht wirklich die Frage warum Du das nicht schon beim generieren der Daten machst, also solche 3er-Gruppen aus den Daten filtern. Wobei die nächste Frage dann natürlich wäre warum überhaupt 100.000 Kombinationen generieren wenn man danach eh nur wieder welche raus filtert, warum nicht gleich nur solche 3er-Gruppen generieren?
Und jetzt sind es exakt drei gleiche Kombinationen? Im letzten Thema zum im Grunde gleichen Thema waren es noch mindestens drei statt exakt drei:
viewtopic.php?f=1&t=48468#p365957:
Python-Nichtskönner hat geschrieben:Ich will ich in einem zweiten Programm nur einen bestimmten Code speichern, bei dem mindestens einmal drei gleiche Kombinationen nebeneinander stehen. Also ...,ACCA, ACCA, ACCA, ...
Die erste Frage von sparrow hast Du auch noch nicht beantwortet: Was hast Du versucht?
Wo liegt jetzt das konkrete Problem?
Und wie soll eigentlich das Ergebnis aussehen? Sollen da jetzt wirklich Auslassungspunkte und Kommas im Ergebnis stehen? Oder nur die 3er-Gruppen durch Leerzeichen getrennt, oder…
Programmieren erfordert ein gewisses Mass an Präzision. Wenn man das Problem nicht präzise beschreiben kann, wird man in der Regel auch bei der Formulierung der Lösung Probleme haben.
Also mein Programm zu den zufallsgenerierten Kombinationen ist:
import random
Bausteine = 4
Kombinationen = 100000
buchstaben = ["A", "C", "B", "D"]
hinzu = ""
for i in range(Kombinationen):
for j in range(Bausteine):
buchstabe = random.choice(buchstaben)
hinzu += buchstabe
hinzu += " "
with open("text.txt", "w") as f:
f.write(hinzu)
Jetzt möchte ich entweder dieses Programm umschreiben, oder die zufallsgenerierte Liste (Textdatei) auf die 3 gleichen Kombinationen durchsuchen. Ihr meint ich soll das in diesem Programm hier machen? Ich hätte jetzt als Idee gehabt mit File open text.txt zu arbeiten. Problem ist, dass ich nicht weiß, wie ich die Liste durchsuchen soll.
Re: Textdatei durchsuchen und bestimmte Sachen speichern
Verfasst: Samstag 2. Mai 2020, 10:30
von __deets__
Bitte die code-tags im vollstaendigen Editor benutzen. Das ist der </>-Knopf. Und NICHT den Post davor im Volltext zitieren. Den kann man davor ganz bequem lesen.
Re: Textdatei durchsuchen und bestimmte Sachen speichern
Verfasst: Samstag 2. Mai 2020, 10:36
von Python-Nichtskönner
__deets__ hat geschrieben: Samstag 2. Mai 2020, 10:30
Bitte die code-tags im vollstaendigen Editor benutzen. Das ist der </>-Knopf. Und NICHT den Post davor im Volltext zitieren. Den kann man davor ganz bequem lesen.
Sorry bin neu hier
Re: Textdatei durchsuchen und bestimmte Sachen speichern
Verfasst: Samstag 2. Mai 2020, 10:43
von __deets__
Und darum machst du dann auch gleich nochmal das, um dessen Unterlassung du gebeten wurdest?
Re: Textdatei durchsuchen und bestimmte Sachen speichern
Verfasst: Samstag 2. Mai 2020, 11:25
von __blackjack__
@Python-Nichtskönner: Zu der ineffizient, also einen handfesten *Problem* mit dem Code der die Kombinationen erzeugt, habe ich ja hier schon mal was gesagt:
viewtopic.php?f=1&t=48468#p365964
Wenn Du die erzeugten Daten dann verarbeiten willst, ist es sowieso ungünstig die als *eine* grosse Zeichenkette vorliegen zu haben, denn die Ebene auf der Du operieren möchtest sind ja nicht die Zeichen sondern die 100.000 Kombinationen. Die müsste man in einer Datenstruktur wie einer Liste haben. Wenn man das aus einer Datei einliest, muss man sie in diese Form bringen. Wenn man das gleich im Programm löst, das die Daten erzeugt, sollte man da gleich so eine Liste erzeugen und nicht erst eine Riesenzeichenkette.
Und Du beantwortest keine Nachfragen, wie soll man da sinnvoll weiterhelfen können? Wenn das direkt in dem Programm passieren darf, stellt sich immer noch die dringende Frage warum Du überhaupt 100.000 Kombinationen erzeugst um danach dann welche raus zu filtern, statt gleich nur die paar Kombinationen zu erzeugen die Du tatsächlich haben willst‽
Und die Frage danach wie das Ergebnis *konkret* aussehen soll, hast Du auch noch nicht beantwortet.
Hier mal in CoffeScript das filtern von Kombinationen die exakt dreimal hintereinander in einer Datei vorkommen:
Code: Alles auswählen
#!/usr/bin/env coffee
{readFileSync, writeFileSync} = require 'fs'
load = (filename) -> readFileSync(filename, 'ascii').trimRight().split /\s+/
runLengthEncode = (items) ->
previousItem = null
count = 0
for item in items
if item == previousItem
count++
else
yield [count, previousItem]
previousItem = item
count = 1
yield [count, previousItem] if count > 0
filterRuns = (items, length) ->
item for [count, item] from runLengthEncode items when count == length
save = (filename, items) -> writeFileSync filename, (items.join ' ') + '\n'
main = -> save 'test2.txt', filterRuns(load('test.txt'), 3)
main() if require.main == module
Das Prinzip dahinter also das „run length encoding“ (RLE) lässt sich in Python genau so umsetzen. Im externen `more_itertools`-Modul gibt es ein `run_length.encode()` das man sich nicht selber schreiben muss.