Hantieren mit großen Listen

Du hast eine Idee für ein Projekt?
xPae
User
Beiträge: 12
Registriert: Freitag 23. März 2012, 10:56

Moin Moin,

endlich habe ich neben anderen Sachen mal wieder Zeit für Python gefunden. Ich erhalten beim Ausführen des Programms von pillmuncher leider immer noch Fehlermeldungen:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:/Users/Hendrik/Desktop/DN", line 12, in <module>
    file_out.writelines('10.3e % 10.3e\n' % each for each in sorted(data_out))
  File "C:/Users/Hendrik/Desktop/DN", line 9, in <genexpr>
    data_out=((float(fields[1]), float(fields[3])) for fields in data_in)
IndexError: list index out of range
Ich habe es mit einer kleinen Textdatei, getrennt durch Tab mit 3 Zeilen einfachen Zaheln ausprobiert. Wenn ich die Zeitel

Code: Alles auswählen

file_out.writelines('10.3e % 10.3e\n' % each for each in sorted(data_out))
lösche, geht das Prog und er schreibt mir die Überschriften in die Ausgabedatei.
Mache ich hier einen Fehler oder ist an dem Code noch etwas falsch? (keine Kritik an pillmuncheer natürlich, danke dir dafür nochmal)
Allerdings müsste doch der Befehl sorted() noch für die jeweile Spalte spezifiziert werden, oder nicht?
Für das weitere Vorgehen:



@BlackJack: Ja das mit dem Cutoff hast du richtig beschrieben. Alle Scores unter diesem Wert können wegfallen.
Entsprechend müsste ich jetzt Generatoren/Iteratoren schreiben für:

a) überspringen, falls in Spalte x ein Wert kleiner zB 100 steht (score filterung)
b) Falls in der anderen Spalte {I/L} vorkommt, die Sequenz und Score dublizieren und jeweils eine Sequenz mit I und eine L mit gleichem Score schreiben.

Ich hoffe das bekomme ich hin, werde bis Ende der Woche hoffentlich meine Vorschläge fertig haben.. gibts iwelche Beispielprogramme/Tuts die dafür zu empfehlen sind?

Beste Grüße

xpae
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

xPae hat geschrieben:Ich erhalten beim Ausführen des Programms von pillmuncher leider immer noch Fehlermeldungen:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:/Users/Hendrik/Desktop/DN", line 12, in <module>
    file_out.writelines('10.3e % 10.3e\n' % each for each in sorted(data_out))
  File "C:/Users/Hendrik/Desktop/DN", line 9, in <genexpr>
    data_out=((float(fields[1]), float(fields[3])) for fields in data_in)
IndexError: list index out of range
Ich habe es mit einer kleinen Textdatei, getrennt durch Tab mit 3 Zeilen einfachen Zaheln ausprobiert.
Dieser Fehler deutet darauf hin, dass deine Ausgangsdatei nicht so aufgebaut ist, wie du glaubst. Vielleicht stehen in deiner Datei wider Erwarten doch Spaces statt Tabs, oder es gibt in irgendeiner (oder allen) Zeilen weniger als vier Spalten, oder es gibt Leerzeilen, oder sonst was in dieser Richtung. Man könnte das Programm diesbezgl. etwas fehlertoleranter machen, zB. indem man statt des csv-Moduls das re-Modul verwendet. Vielleicht genügt es auch schon, Leerzeilen herauszufiltern. Besser wäre es aber IMO, wenn du dafür sorgen könntest, dass deine Ausgangsdatei in Ordnung gebracht wird.
In specifications, Murphy's Law supersedes Ohm's.
xPae
User
Beiträge: 12
Registriert: Freitag 23. März 2012, 10:56

Das dachte ich auch, jetzt habe ich eine Beispiel datei mit Excel erstellt und dann " save as txt.data (tab delimited) " verwendet. Demnach müsste das mit dieser aufejdenfall funktionieren, allerdings wird dieser Fehler ausgegeben (not all arguments converted during string formatting) :/ :


Code: Alles auswählen

Traceback (most recent call last):
  File "C:/Users/Hendrik/Desktop/DN", line 12, in <module>
    file_out.writelines('10.3e % 10.3e\n' % each for each in sorted(data_out))
  File "C:/Users/Hendrik/Desktop/DN", line 12, in <genexpr>
    file_out.writelines('10.3e % 10.3e\n' % each for each in sorted(data_out))
TypeError: not all arguments converted during string formatting
Data:

Code: Alles auswählen

asdg	asds	asda	asdgg	asdhh	asdhh
1	8	67	56	65	67
23	7	90	7	76	76
45	6	56	6	67	67
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Noch genauer könnte die Fehlermeldung wohl kaum sein. Dort steht doch ganz genau was nicht funktioniert und im Traceback wird dir sogar noch die Zeile angezeigt. Probiere doch einfach mal per Hand eine einzelne Zeile zu formatieren.
Das Leben ist wie ein Tennisball.
xPae
User
Beiträge: 12
Registriert: Freitag 23. März 2012, 10:56

Kaum erstelle ich die Frage fiel es mir natürlich auch auf ('%-10s %-10s\n'), entschuldigt die "blöde" Frage.

Wunderbar! Eine Frage hätteich jedoch noch bevor die richtige Arbeit losgeht (nach der schon allzuschweren geburt - nochmals sry für anfänger fehler)

Wenn ich jetzt zB ein "NaN" in einer Zeile der gewünschte Spalte hätte würde das Programm ja abschmieren, kann man die floats() Funktion durch etwas generelleres Ersetzten? Oder zB nur für Buchstaben? : /
BlackJack

@xPae: Ab Python 2.6 kann man `float()` auch 'NaN' oder 'nan' übergeben.
Antworten