Dateibearbeitung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
alw_me
User
Beiträge: 6
Registriert: Freitag 1. August 2008, 07:04

Freitag 1. August 2008, 07:40

Hallo,

habe mit Python ein Script geschrieben, dass mir eine CSV Datei ausliest die jeweils relevanten Daten in dieser Datei aufsplittet und mir die benötigten Datensätze in eine Textdatei schreibt und dort an die bestehenden Datensätze anhängt.

Jetzt sollen diese Datensätze aber nicht mehr angehängt werden, sondern die Textdatei soll durchsucht werden und der Datensatz an die richtige Stelle eingefügt werden.

Bsp: Die Textdatei enthält 1000 Postleitzahlen, nun wird aus der CSV eine Postleitzahl ausgelesen, nach dieser Postleitzahl wird in der Textdatei gesucht wenn vorhanden dort drunter eingefügt, sonst wird die Postleitzahl neu angelegt.


Wie schaffe ich es in Python einen Wert zB. '12345' aufzusplitten in '1' '2' '3'..., sinn der Sache ist, dass ich zwar auch nach ganzen Datensätzen suche, wenn der aber nicht gefunden wird soll überprüft werden ob ein ähnlicher Datensatz vorhanden ist.
Danach könnte ich eine große If Abfrage bauen, die Datei Zeilenweise durchlaufen und immer wieder abfragen, ob eine solche oder ähnliche Postleitzahl gefunden wurde..



Danke schonmal für eure Hilfe.

Grüße
BlackJack

Freitag 1. August 2008, 09:54

Um die direkte Frage zu beantworten:

Code: Alles auswählen

In [5]: list('12345')
Out[5]: ['1', '2', '3', '4', '5']
Eventuell ist `difflib.get_close_matches()` einen Blick wert.
alw_me
User
Beiträge: 6
Registriert: Freitag 1. August 2008, 07:04

Montag 4. August 2008, 06:46

Morgen,

ich muss gestehen, dass ich momentan einfach nicht weiterkomme. Habe schon ein paar Dinge ausprobiert, aber so recht funktioniert einfach nichts.

Deshalb nun meine Frage, hätte ihr noch Ideen, Vorschläge oder Lösungsansätze, wie man ein Suchscript in Python realisieren könnte?

Wie gesagt, es soll eine Datei nach einer gleichen oder möglichst ähnlichen Postleitzahl durchsucht werden. Darunter wird dann die PLZ eingefügt und die Zeile wo dies geschieht sich gemerkt...


Wäre für Tipps sehr dankbar.


Grüße
BlackJack

Montag 4. August 2008, 06:56

Irgendwie klingt das ein bisschen nach dem Einsatzgebiet einer Datenbank.

So ein "flat text"-Format eignet sich sowieso nicht so gut zum Einfügen von Daten. Man muss immer die ganze Datei neu schreiben. Falls das kein Problem ist, würde ich die Datei komplett einlesen, die Datensätze in ein Dictionary mit der PLZ als Schlüssel stecken, die Veränderungen vornehmen und dann alle Datensätze nach PLZ sortiert wieder raus schreiben.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Montag 4. August 2008, 07:36

Was mich etwas stutzig macht ist die Formulierung "möglichst ähnliche Postleitzahl" und dein Wunsch - falls er damit zu tun hat - nach Aufsplitting.

Geht es dir einfach um eine Ordnung der PLZ der Größe nach? Dann ist aufsplitten nicht nötig - du kannst die PLZ doch einfach miteinander vergleichen.

Wenn du die PLZ nicht einfach der Größe nach ordnen willst, dann müsstest du mal präzisieren, was du unter "möglichst ähnlich" verstehst.

Eine mögliche grundlegende Verfahrensweise zum Einlesen, Einfügen, Sichern der Daten hat BlackJack ja mittlerweile beschrieben.
alw_me
User
Beiträge: 6
Registriert: Freitag 1. August 2008, 07:04

Montag 4. August 2008, 08:42

Momentan mache ich es tatsächlich so, dass ich immer die ganze Datei neu schreibe, dies dürfte von der Anforderung her auch kein Problem darstellen.
Das mit dem Dictionary verstehe ich noch nicht ganz, man hatt doch immer einen Wert und diesem ist ein Schlüssel zugeordnet.
Hätte ich dann also z.B. alle vorhanden Postleitzahlen, denen dann die neuen Postleitzahlen zugeordnet werden?

Zum Thema möglichst ähnlich,

die Postleitzahlen sollen natürlich schon nach größe geordnet werden. Es gibt zwei Möglichkeiten entweder die gesuchte Postleitzahl ist in der Datei schon vorhanden, dann wird die neue Postleitzahl darunter eingefügt. Oder die Postleitzahl ist noch nicht vorhanden, dann soll die Postleitzahl in der Datei gesucht werden, welche der neuen noch am ähnlichsten ist. Also ja, nach Größe sortiert..
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Montag 4. August 2008, 08:59

Nachdem ich den ganzen Thread jetzt noch zweimal gelesen habe, ist mir immer noch nicht oder gerade jetzt nicht mehr klar, was genau in deiner Datei drin ist. Man könnte deine Ausführungen so verstehen, als seien da NUR Postleitzahlen drin. Aber das scheint mir wenig sinnvoll und darum auch unwahrscheinlich.

Man könnte es aber auch so verstehen (oder auch nicht):

Vorhandene Textdatei:
"Hans Müller, 23423 Buxtehude, .... "
"Lucy Meier, 89443 Garmisch, ...."

Jetzt liest du die csv-Datei mit neuen Datensätzen ein, die in die vorhandene Textdatei eingearbeitet werden sollen.
Angenommen du liest jetzt ein:
"Rosi Berger, 67458 Gießen, ...."

dann soll die Textdatei hinterher so aussehen:
"Hans Müller, 23423 Buxtehude, ...."
"Rosi Berger, 67458 Gießen, ...."
"Lucy Meier, 89443 Garmisch, ...."

Richtig?
BlackJack

Montag 4. August 2008, 09:16

Falls es wirklich um "sortiert einfügen" geht, wäre das `bisect`-Modul eventuell auch interessant.
alw_me
User
Beiträge: 6
Registriert: Freitag 1. August 2008, 07:04

Montag 4. August 2008, 10:06

@numerix
Ich habe meine CSV Datei, da steht z.B. drin

Kostenstelle;Straße;Postleitzahl;Ort
111111;Test;12345;Irgendwo
222222;Teeeeest;54321;Nirgendwo
33333333;Äöü??ßßß;45645;sf

Außerdem habe ich 4 Dateien. Eine kostenstelle.txt, eine straße.txt, eine postleitzahl.txt und eine ort.txt.

Nun wird die CSV Datei ausgelesen und immer wo ein Semikolon auftritt wird gesplittet und auf die Dateien aufgeteilt. In Postleitzahl.txt stehen nur Postleitzahlen, in straße.txt nur Straßen usw., immer durch Komma und Zeilen getrennt.

z.B.
12111
23333,
34444

Später sollte es dann z.B. so aussehen

11111,
12111,
22222,
23333,
33333,
34444

Bisher splittet er und schreibt die neuen Werte aus der CSV Datei einfach unter alle anderen Werte in der jeweiligen Textdatei.

Später soll es so sein, dass wie gesagt die Postleitzahl gesucht wird und die Zeile in die der neue Wert eingefügt wird sich gemerkt wird. Genau in diese Zeile von der Postleitzahl ausgehend sollen dann die anderen Werte in den anderen Dateien geschrieben werden.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Montag 4. August 2008, 10:12

Wozu brauchst du unbedingt vier separate Dateien?

Was ist denn das Ziel der ganzen Aktion:
Was willst du mit den Daten machen (können) bzw. erreichen?
(Ich meine nicht das, was du schon beschrieben hast, sondern das eigentliche Ziel, das dich dazu veranlasst, die Daten in dieser Form verfügbar zu haben.)

Möglicherweise gibt es einen (erheblich) günstigeren Weg, dieses Ziel zu erreichen, als so, wie du es vorhast.
BlackJack

Montag 4. August 2008, 10:27

Also für mich sieht das immer mehr danach aus, als wenn man da eine Datenbank verwenden sollte.
alw_me
User
Beiträge: 6
Registriert: Freitag 1. August 2008, 07:04

Montag 4. August 2008, 10:41

Ich habe selbst keine Ahnung, wofür dies später genau dienen soll. Habe lediglich genauso meinen Auftrag bekommen und soll dies nun gemäß den Anforderungen umsetzen.

Ich persönlich sehe auch noch keinen genauen sinn drin, aber nunja :)
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Montag 4. August 2008, 11:21

alw_me hat geschrieben:Ich habe selbst keine Ahnung, wofür dies später genau dienen soll. Habe lediglich genauso meinen Auftrag bekommen und soll dies nun gemäß den Anforderungen umsetzen.)
Sag' Dein Problem Deinem Auftraggeber - Projektmanagment ohne konkrete Absprachen funktioniert nicht. So eine Rückmeldung gibt man besser früher als später - sonst geht bloß ein Projekt vor die Hunde.

Gruß,
Christian
alw_me
User
Beiträge: 6
Registriert: Freitag 1. August 2008, 07:04

Dienstag 5. August 2008, 06:51

Hat jetzt vielleicht noch jemand einen Tipp für mich, wie ich so ein Suchskript realisieren könnte?

Habe mich mal wieder mit meinen Auftraggeber abgesprochen und sehe nun auch den Sinn darin. Zeitlich wird es jetzt nur so langsam eng, bis Freitag soll das Suchskript eigentlich funktionieren.

Für Tipps wäre ich wirklich sehr dankbar..




Grüße
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Dienstag 5. August 2008, 07:06

Dann solltest du uns den bisherigen Code vielleicht mal zeigen.
Antworten