Suchen und anhängen

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.
Antworten
Chibi
User
Beiträge: 22
Registriert: Samstag 7. November 2009, 12:10

Hallo Leute.

Ich habe ein Problem mit einem Programm, das ich schreiben will.
Das Programm dient dazu, in eine Datei (nennen wir sie "test") Zusatzinformationen zu schreiben,
die noch nicht vorhanden sind.

Die Datei(test) in die schreiben will, enthält neben anderen Informationen, Geburtsdaten von Personen.
An diese Geburtsdaten sollen jetzt die dazugehörigen Namen angehängt werden.

In meinem File(test) stehen die Geburtsdaten so: ... 79-1219 .....

Dazu bekomm ich aus einer Datenbank eine Exceltabelle, wobei die erste Spalte das Geburtsdatum enthält
(welches auch in dem File "test" steht) und die zweite Spalte den jeweiligen Namen dazu.

z.B. so: Spalte1 = 79-01219, Spalte2 = Andreas.

Die Liste der Geburtsdaten in der Exceltabelle ist immer gleich lang. Es kommt allerdings auch vor,
dass in der Exceltabelle manchmal kein Name in einer zeile der spalte steht.

Auf jeden Fall, will ich die Namen in dieser Form in meinem File "test" anhängen : 79-1219_Andreas.
Wie man sieht, ist das Datum in der Exceltabelle mit einer zusätzlichen 0 versehen, da diese stört,
habe ich sie im folgenden Programm entfernt, die Länge des Datums ist ja immer gleich.

Ich habe jetzt schon mal in meinem Programm zwei Listen.
In der einen Liste, habe ich aus der Exceltabelle die erste Spalte (Geburtsdaten) ausgelesen
und die überflüssige 0 entfernt.
In der anderen Liste, habe ich aus der Exceltabelle die zweite Spalte ausgelesen (Namen)
(Dort wo kein Wert (Name) zum Datum steht, wird eine Leere Zeile ausgegeben).


Meine Frage ist nun:
Wie kann ich die Werte, der einen Liste (Geburtsdaten) in dem File(test) suchen und dort
die Werte der zweiten Excelspalte mit Trennung durch ein "_"hineinschreiben?
Hat da vielleicht jemand eine Idee oder nen Vorschlag?

Vielen Dank im voraus.


Mein Code, den ich schon hab:

Code: Alles auswählen

import xlrd
import sys
ergebnis=[]

f = open ("test","a+")
o = open ("out.txt","w")
s = f.read()
f.close()
book = xlrd.open_workbook("1.xls")

sheets = book.sheets()

for sheet in sheets:
    cols = sheet.ncols
    rows = sheet.nrows
	#zeile mit Geburtstagen n dieser Form:00-01912
    out=  str(sheet.col_values(0))
	#zeile mit Name :Andreas
    out2= str(sheet.col_values(1))
    erstezeile=out.split(",")
    zweitezeile=out2.split(",")
#da immer u vorher ausgegeben wird muß dieses für die Suche entfernt werden
zeile=erstezeile[0].find("u")
zeile1=[]
for i in range (0,len(erstezeile)):
            zeile1 += [erstezeile[i][zeile+2:]]
            
#entfernen von der überflüssigen 0:damit diese Ausgabe:00-1912
zeileeins=[]
for i in range (0,len(erstezeile)):
    zeileeins+=[ zeile1[i][0:4]+zeile1[i][5:-1]]
   
#ebenfalls entfernen des u   
zeilezwei=zweitezeile[0].find("u")
zeile2=[]
for i in range (0,len(zweitezeile)):
            zeile2 += [zweitezeile[i][zeilezwei+2:-1]]
             


outtext = "\n".join(ergebnis)  
sys.stdout.write(outtext)
o.write(outtext)
o.close()
BlackJack

@Chibi: Du wandelst da Listen in Zeichenketten um, um die dann wieder durch splitten an Kommata in Listen umzuwandeln und Du entfernst das "u" vorne an diesen Zeichenketten. Ich denke Du solltest erst noch eine Runde Grundlagen lernen bevor Du ein Problem mit Python löst.

Die Grundtypen wie Listen, Zeichenketten, Dictionaries und auch das zugegebenermassen etwas anstrengendere Thema Unicode muss man für so eine Aufgabe mindestens drauf haben.

Ansonsten solltest Du nicht so an Buchstaben bei den Namen sparen und vielleicht mal über das aufteilen des Programms auf Funktionen in Betracht ziehen.

Und beim Nachdenken über die Lösung nicht vergessen, dass zu einem Geburtsdatum auch mehr als ein Name gehören kann.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

mir erschließt sich der Sinn der Art der Speicherung in der Datei nicht... das sieht unglaublich umständlich aus.

Warum speicherst du nicht eine CSV-Datei, die kann man später viel besser durchsuchen - zumindest im Vergleich zu deinem Konstrukt.

Oder, hier noch besser, eine (einfach) Key-Value Database. Da bringt Python von Haus aus schon diverse mit.

Gruß, noisefloor
Antworten