Textdatei durchsuchen und bestimmte Sachen speichern
-
- User
- Beiträge: 15
- Registriert: Donnerstag 30. April 2020, 10:14
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.
-
- User
- Beiträge: 15
- Registriert: Donnerstag 30. April 2020, 10:14
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 habsparrow 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?
- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@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:
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.
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:
Die erste Frage von sparrow hast Du auch noch nicht beantwortet: Was hast Du versucht?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, ...
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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
-
- User
- Beiträge: 15
- Registriert: Donnerstag 30. April 2020, 10:14
Also mein Programm zu den zufallsgenerierten Kombinationen ist:__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:Die erste Frage von sparrow hast Du auch noch nicht beantwortet: Was hast Du versucht?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, ...
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.
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.
-
- User
- Beiträge: 15
- Registriert: Donnerstag 30. April 2020, 10:14
Sorry bin neu hier__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.
- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@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:
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.
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
“Vir, intelligence has nothing to do with politics!” — Londo Mollari