Seite 1 von 1

Spalten aus einer CSV-Datei schreiben.

Verfasst: Montag 12. Juli 2010, 12:06
von ratna_fong
Hallo zusammen :D

ich habe eine ganz normale CSV-Datei vorliegend, es gibt also Spaltenbezeichener, wie ID, Name, Adresse, Telefonnummer, Route, Notebook, usw. Und die Zeilen sind die entsprechenden Einträge. Also:

ID Name Adresse Telefonnummer Route Notebook
0001 Ratna Eifel 12345 A NotebookA
0002 Wolfgang Berlin 23456 B NotebookB
...
Nun, diese Spaltenbezeichner sollen in eine .txt-Datei geschrieben werden. Die .txt-Datei sieht folgendermaßen aus:

ID#Umfeld#Steinig
0001#Laut#Ja
0001#Leise#Nein
0002#Normal#Ja

Am Ende soll dann so aussehen:

ID#Name#Adresse#Telefonnummer#Route#Notebook#Umfeld#Steinig
0001#Ratna#Eifel#12345#A#NotebookA#Laut#Ja
0001#Ratna#Eifel#12345#A#NotebookA#Leise#Nein
0002#Wolfgang#Berlin#23456#B#NotebookB#Normal#Ja

Das Rauter-Zeichen in der .txt-Datei ist so gewollt.

Ich sitze schon seit Stunden und mir fehlen einfach die Ideen. Könnt Ihr vielleicht mal helfen? Ich bin für jede Hilfestellung sehr dankbar. Ich danke Euch..

Gruss,

Eure Ratna :oops:

Re: Spalten aus einer CSV-Datei schreiben.

Verfasst: Montag 12. Juli 2010, 12:43
von Trichter
Dieses Skript:

Code: Alles auswählen

# erste datei einlesen
file1 = open("input1", "r")
f1_list = []
while True:
    line = file1.readline()
    if len(line) == 0:
        break
    f1_list.append(line.split())

# zweite datei einlesen
file2 = open("input2", "r")
f2_list = []
while True:
    line = file2.readline()
    if len(line) == 0:
        break
    f2_list.append(line.split('#'))

# inhalt der neuen datei erzeugen
output_string = ""
for element2 in f2_list:
    id = element2[0]
    for element1 in f1_list:
        if element1[0] == id:
            newline_list = element1[:] + element2[1:]
            output_string += "#".join(newline_list)

print output_string
ergibt bei mir folgende Ausgabe:

Code: Alles auswählen

ID#Name#Adresse#Telefonnummer#Route#Notebook#Umfeld#Steinig
0001#Ratna#Eifel#12345#A#NotebookA#Laut#Ja
0001#Ratna#Eifel#12345#A#NotebookA#Leise#Nein
0002#Wolfgang#Berlin#23456#B#NotebookB#Normal#Ja
Ich hab hier leider nur Python 2.4. Ansonsten könnte man die input-Dateien mittels with statements einlesen.

Re: Spalten aus einer CSV-Datei schreiben.

Verfasst: Montag 12. Juli 2010, 13:37
von BlackJack
@Trichter: Das mag zwar funktionieren, ist aber sicher nicht der Weg über den man das lösen sollte. Das ist ja alles super-umständlich ausgedrückt. Ausserdem kann man auch ohne ``with``-Anweisung Dateien nach gebrauch wieder schliessen.

@ratna_fong: Schau Dir mal das `csv`-Modul aus der Standardbibliothek an. Und überlege welche Information in der jeweiligen Tabelle einen Datensatz eindeutig identifiziert und welche Information Datensätze in beiden Tabellen verbindet.

Dann musst Du nur noch eine der beiden Tabellen in eine geeignete Datenstruktur in den Speicher lesen, so dass über die Information über die die Zuordnung der Datensätze geschieht, einfach auf den betreffenden Datensatz zugegriffen werden kann. Danach kannst Du die zweite Tabelle zeilenweise einlesen, aus der Datenstruktur die zugehörigen Werte aus der anderen Tabelle holen, und das Ergebnis in eine dritte CSV-Datei schreiben.

Re: Spalten aus einer CSV-Datei schreiben.

Verfasst: Montag 12. Juli 2010, 14:28
von ratna_fong
vielen Dank für das Skript, Trichter.

Danke sehr für die Idee, BlackJack.
Wenn ich den Einsatz nach Deiner Idee gehe, dann ist ID die eindeutige Identifizierung der .txt-Datei. In meiner der .txt-Datei gehören in der Tat ALLE Zeilen zu der ID 1. (also, Ratna). D.h. Im Grunde muss ich die Spalten in der .csv-Datei in die .txt-Datei hinzuaddieren.

Das csv-Modul hab ich mir angeguckt. Ich muss ganz ehrlich sagen, die Beschreibungen dort sind mir einfach zu hoch. Außerdem, mir fällt es unheimlich schwer, die Werkzeuge dieses Moduls zu verwenden, weil mir die Idee fehlt.

Die Methode csv.reader(open("datei.csv")) zum Beispiel implementiert ein Iterationsprotokoll.
Ich habe folgendes gemacht:
reader = csv.reader(open("datei.csv"))
Ich konnte nicht auf die einzelne Datensätze zugreifen, hab mit reader.readline() versucht, ging nicht. Weil wie gesagt, reader implementiert eine Iteration, man könnte mit for arbeiten, aber ob mir das weiterbringt, das wage ich zu bezweifeln.

Jungs, Ihr merkt also, ich habe nicht die Idee, die Aufgabe zu lösen. Hätte ich die Idee, müsste ich mich noch mit den Werkzeugen noch vertraut machen. Also, ich bin etwas verzweifelt im Moment.

Hoffentlich könnt Ihr mir mal etwas helfen.

Vielen Dank..

Gruss,

Eure Ratna

Re: Spalten aus einer CSV-Datei schreiben.

Verfasst: Montag 12. Juli 2010, 14:30
von lutz.horn
gehören in der Tat ALLE Zeilen zu der ID 1
Wie soll man sich das bei Deinem Beispiel vorstellen? Du hast ja für die ID "0001" jeweils zwei Zeilen. Wie sollen die eindeutig zusammengefasst werden?

Re: Spalten aus einer CSV-Datei schreiben.

Verfasst: Montag 12. Juli 2010, 14:51
von ratna_fong
ja, stimmt. ich habe mich geirrt. :(

die .txt-Datei sieht so aus:

ID#Umfeld#Steinig
0001#Laut#Ja
0001#Leise#Nein
0001#Normal#Ja


Und dann die .cvs-Datei so:

ID Name Adresse Telefonnummer Route Notebook
0001 Ratna Eifel 12345 A NotebookA
0002 Wolfgang Berlin 23456 B NotebookB

Am Ende soll so eine Datei rauskommen:

ID#Name#Adresse#Telefonnummer#Route#Notebook#Umfeld#Steinig
0001#Ratna#Eifel#12345#A#NotebookA#Laut#Ja
0001#Ratna#Eifel#12345#A#NotebookA#Leise#Nein
0001#Ratna#Eifel#12345#A#NotebookA#Normal#Ja

Also, die .cvs-Datei dient quasi als eine Art Dictionary.

Ich bedanke mich für Eure Hilfe. :)

Re: Spalten aus einer CSV-Datei schreiben.

Verfasst: Montag 12. Juli 2010, 15:31
von BlackJack
@ratna_fong: `csv.reader()` liefert einen Iterator. Der hat zum einen die entsprechenden Methoden die jeder Iterator hat, zum Beispiel um das nächste Element abzufragen, und zum anderen kann man darüber in einer ``for``-Schleife iterieren. Du müsstest noch den passenden Spaltentrenner übergeben und dann könntest Du doch einfach mal ausprobieren was das für Elemente sind, die Du beim iterieren bekommst.

Re: Spalten aus einer CSV-Datei schreiben.

Verfasst: Montag 12. Juli 2010, 17:12
von ratna_fong
Weiß vielleicht jemand, wie ich einen Spaltenbezeichner mitten drin in eine Zeile einfügen. Also:

.txt-Datei:

ID#Name#Adresse#Stadt


.cvs-Datei:

ID Vorname Adresse PLZ


Am Ende soll die .txt-Datei so aussehen:

ID#Name#Vorname#Adresse#PLZ#Stadt


Also, was auf der .txt-Datei ist, soll bleiben, und einige aus Spaltenbezeichner aus der .cvs-Datei in die .txt-Datei hinzufügen.

Gruss,

Eure Ratna

Re: Spalten aus einer CSV-Datei schreiben.

Verfasst: Montag 12. Juli 2010, 19:48
von ratna_fong
.cvs-file :

NameID;LastName;Sex;Age;Status;Add
0001;AAA;Male;32;;Something
0002;BBB;Female;23;Single;

.txt-file :

#NameID#FirstName#Street
0001#ForAAA#Paris
0001#ForAAA#Tokyo
0002#ForBBB#Washington
0002#ForBBB#Cologne
0002#ForBBB#Amsterdam


Aus diesen 2 Files muss soll folgende .txt-Datei sein:

#NameID#FirstName#LastName#Street#Sex#Age#Status#Add
0001#AAA#ForAAA#Paris#Male#32##Something
0001#AAA#ForAAA#Tokyo#Male#32##Something
0002#BBB#ForBBB#Washington#Female#23#Single#
0002#BBB#ForBBB#Cologne#Female#23#Single#
0002#BBB#ForBBB#Amsterdam#Female#23#Single#

Ich bin ganz verzweifelt. Kann mir einer bitte helfen?

Eure Ratna

Re: Spalten aus einer CSV-Datei schreiben.

Verfasst: Montag 12. Juli 2010, 20:05
von BlackJack
@ratna_fong: Irgendwie zeigts Du hier immer nur Aufgaben die Du lösen sollst, aber kein Stück Eigenleistung. Was hast Du denn schon? Wo genau liegt das Problem? Hast Du das Tutorial schon durchgearbeitet? Sind Dir die Methoden von Datei- und Zeichenkettenobjekten vertraut?

Re: Spalten aus einer CSV-Datei schreiben.

Verfasst: Montag 12. Juli 2010, 20:40
von ratna_fong
Meine Idee ganz zu Anfang war eigentlich:
Vergleiche die 1. Zeile beider Dateien, falls etwas in der .txt-Datei fehlt, dann hinzufügen. Das kriege ich nicht hin.

fileopener = open("datei.csv","rb")

file1 = fileopener.next()

#jetzt möchte ich gerne das Semikolonzeichen der Zeile wegschmeißen und dann in die Wörter in eine Liste reintun
file1 = fileopener.strip(;)

#kommt aber nicht so raus, wie ich das möchte.

och gott.. ich bin verzweifelt. Unter Zeitdruck ist echt mieß.

Re: Spalten aus einer CSV-Datei schreiben.

Verfasst: Montag 12. Juli 2010, 20:53
von ratna_fong
ich habe zumindest schonmal folgendes:

Code: Alles auswählen

file1 = open("datei1.csv","rb")
ergebnis = file1.next()
ohnesemikolon = ergebnis.split(";")

file2 = open("datei2.txt")
ergebnis2 = file2.next()
ohnerautezeichen = ergebnis2.split("#")

#jetzt muss ich ohnesemikolon und ohnerautezeichen miteinander vergleiche, mal gucken, wenn etwas aus datei1.csv in der #datei2.txt fehlt, dann muss ich die fehlenden zusätzlich reintun
 

Weiss jemand vielleicht, wie ich sie miteinander vergleiche?

Gruss,

Eure Ratna

Re: Spalten aus einer CSV-Datei schreiben.

Verfasst: Dienstag 13. Juli 2010, 01:53
von gkuhl
ratna_fong hat geschrieben:och gott.. ich bin verzweifelt. Unter Zeitdruck ist echt mieß.
Eine Programmiersprache (selbst Python) kann man halt nicht mal eben so schnell anwenden. Mindestens ein bis zwei Wochen für die Grundlagen (Tutorial) musst du dir schon nehmen. Ansonsten hat Trichter ja schon ein längeres, unpythonisches Beispiel geliefert.

Grüße
Gerrit