Python Anfänger braucht hilfe :(

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
Beagle
User
Beiträge: 13
Registriert: Mittwoch 11. Juli 2012, 19:35

Erstmal hallo leute,
bin neu hier und muss leider schon meine erste richte Noobfrage stellen.

ich scheitere daran ein txt file mittels numpy in ein array zu importieren.

Funktionierende varianten:
data = np.loadtxt("test.txt")
print data

c = "C:/xxx/FH/Python/DA/TLA_2/test.txt"
data = np.loadtxt(c)
print data

nichtfunktionierend:
c = (self.tlaFilename.text())
data = np.loadtxt(c)
print data

wobei in dem feld tlaFilename genau der gleiche Pfad steht wie wenn ich ihm manuell angebe.
Hoffe Ihr könnt mir helfen.
Auch wenn ich mir im 2. sowie im 3. bsp c anzeigen lasse ist es komplett ident.

Liebe Grüße,
Beagle
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

1. Bitte Code in [ python ] tags setzen.

2. Kompletten Code, bzw minimal Bsp des Problems zeigen den in deinem gezeigten Quelltext ist der Fehler nicht ersichtlich.

mfG
Beagle
User
Beiträge: 13
Registriert: Mittwoch 11. Juli 2012, 19:35

Code: Alles auswählen

c = (self.tlaFilename.text())
print c

Code: Alles auswählen

c = "C:/xxx/FH/Python/DA/TLA_2/test.txt"
print c
Für die grafische oberfläche verwende ich Qt
Diese beiden geben komplett den gleichen Output. Aber je nachdem ob ich im 1. oder im 2. Beispiel c verwende funktioniert es oder nicht.
kann es sein dass durch self.xxx.text kein string übergeben wird?

Hoffe dass reicht, wüsste nicht wie ich das besser beschreiben könnte.

Danke schonmal.
BlackJack

@Beagle: Lass Dir mal die `repr()`-Darstellung von `c` in beiden Fällen ausgeben und vergleiche das mal.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Beagle hat geschrieben:Auch wenn ich mir im 2. sowie im 3. bsp c anzeigen lasse ist es komplett ident.
Sicher? Sind auch keine Zeilenumbrüche oder ähnliches enthalten? Überprüfe das jeweils mit

Code: Alles auswählen

print repr(c)
Und bitte lass im Code unnötige Klammern weg. Die erhöhen nur die Komplexität beim Lesen.

Code: Alles auswählen

# pfui
c = (self.tlaFilename.text())
# besser
c = self.tlaFilename.text()
Noch besser wäre natürlich zusätzlich die Wahl eines aussagekräftigen Bezeichnernamens. c ist einfach nichtssagend bzw. führt zu falschen Assoziationen wie der Lichtgeschwindigkeit.
Beagle
User
Beiträge: 13
Registriert: Mittwoch 11. Juli 2012, 19:35

Hier sehe ich einen Unterschied.

PyQt4.QtCore.QString(u'C:/xxx/FH/Python/DA/TLA_2/test.txt')

'C:/xxx/FH/Python/DA/TLA_2/test.txt'

Und c ist derzeit nur ein "Probiername" die eigentliche Variable heisst eh filename :)
Zuletzt geändert von Beagle am Freitag 13. Juli 2012, 15:23, insgesamt 1-mal geändert.
BlackJack

@Beagle: Da müsstest Du die `unicode()`-Funktion verwenden um eine Python-Zeichenkette zu bekommen.
Beagle
User
Beiträge: 13
Registriert: Mittwoch 11. Juli 2012, 19:35

Vielen Herzlichen Dank euch allen; es funktioniert!!!

Ich hoff ich kann in den nächsten Tagen und Wochen noch öfter vorbeischaun falls ich kleine "Problemchen" hab ;)

LG,
Beagle
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Du kannst auch ohne Problemchen vorbeischauen, willkommen im Forum! :mrgreen:
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Beagle
User
Beiträge: 13
Registriert: Mittwoch 11. Juli 2012, 19:35

Hallo Leute,
ich habe leider schon wieder eine Frage. ich importiere mittels loadtxt 2 Felder eines Txt Files. Dies funktioniert auch grundlegend. Es handelt sich bei diesen Feldern um Datum sowie Uhrzeit. Nach derzeitigen Stand werden diese allerdings nur als String gespeichert. Da ich im weiteren Verlauf des Programms, allerdings ein bisschen damit "rechnen" will (nur von 1-31 Mai, oder nur alle von 1 Tag usw.) würde ich diese gerne in ein Datumsformat umwandeln.

Code: Alles auswählen

data = np.loadtxt(conv_filename, delimiter ='" "', skiprows = 1, usecols=(1, 2), dtype={'names': ('date', 'time'),'formats': ('S9', 'S9')})
[('3May2012', '14:26:37') ('3May2012', '14:26:58') ('3May2012', '14:26:58')
..., ('2Jul2012', '9:26:56') ('2Jul2012', '9:26:59')
('2Jul2012', '9:26:59')]

Grundsätzlich geht dies ja mit

Code: Alles auswählen

time.strptime(datestring,"%d%b%Y")
time.strptime(datestring,"%H:%M%S")
Es sollte doch möglich sein diese Konvertierung mittels converters gleich beim Einlesen des txt Files durchzuführen. Da ich es aber trotz hunderter Versuche nicht geschafft habe, und auch im Internet nichts ähnliches gefunden habe, bin ich gerade am Zweifeln.

LG,
Beagle
BlackJack

@Beagle: Eigentlich musst Du doch nur zwei Funktionen schreiben welche jeweils die Umwandlung vornehmen und dann eine Abbildung von Spaltennummer auf die jeweilige Umwandlungsfunktion als `converters`-Argument übergeben. Was Dir für `numpy` dann wahrscheinlich noch fehlt ist das umwandeln in *eine* Zahl. `time.strptime()` liefert ja ein komplexeres Objekt. Die könnte man zwar auch in einem `numpy`-Array speichern, aber da sehe ich dann keinen Vorteil von `numpy` mehr.
Beagle
User
Beiträge: 13
Registriert: Mittwoch 11. Juli 2012, 19:35

Ich schildere mal kurz was ich grundsätzlich damit vor habe, vielleicht habe ich ja einen grundsätzlichen Denkfehler, und da wäre es mir lieber wenn er frühzeitig erkannt wird :)

Mittels einer grafischen Oberfläche (Qt4) soll ein Textfile eingelesen werden. Hierbei sind derzeit für mich nur die Spalte 2 und 3 relevant (Datum und Uhrzeit). Diese "Zeitdaten" sollen anschließend mit einem Balkendiagram (Matplotlib) visualisiert werden. Also zB im Mai gab es xxx Logeinträge, im im Juni yyy und im Juli zzz. Anschließend soll es noch möglich sein mittels Buttens den Ausschnitt sowie den Zeitbereich zu verändern. Also von der "Jahresansicht" wird mittels eines Button in die "Monatsansicht" gewechselt in denen dann zB 1. Mail xxx, 2. Mai yyy, ...... . Dies soll bis in die "Minutenansicht" gehen (also am 5. Mai 14:54 Sekunde 1 xxx, Sekunde 2 yyy,...). Zur Realisierung war mein derzeitiger Plan das Textfile mittels np.loadtxt einzulesen, anschließend in ein Datumsformat zu convertieren, dieses dann zu Verarbeiten (Denke das sollte mit schleifen möglich sein).

Ist dies so realisierbar?
BlackJack

@Beagle: Wenn man da mit `numpy` arbeiten möchte würde ich ein eindimensionales Array mit den Daten als ganzer Zahl verwenden. Also erst einmal ein zweidimensionales Array einlesen wo beide Werte in Sekunden seit „Epoch” für die Datumsangaben und seit Mitternacht für die Zeiten umgewandelt werden. Die kann man einfach addieren und damit jedes Datum aus der Datei in *einer* Zahl repräsentiert. Zum plotten liesse sich dann `numpy.histogram()` verwenden. Dazu muss man dann noch ein bischen zwischen den Zahlen und „lesbareren” Daten hin und her rechnen, da würde ich das `datetime`-Modul den Funktionen im `time`-Modul vorziehen.
Antworten