Moin !
Ich habe mir gestern den Kopf ueber folgendes Problem zerbrochen :
Es gibt eine Datei ( æhnlich einer Logdatei ) in der folgende Infos stehen kønnten :
TITLE: EDL CONFORM_V01
001 1 V C sc01_sh01_v01 0007 0058 0001 0051
002 ....... usw.
Ich møchte nun nacheinander jeweils eine Zeile in eine Liste packen ( also alles was durch tab / leerzeichen getrennt ist auf einen eigenen Index )
um vernuenftig mit den einzelnen Daten arbeiten zu kønnen.
Das einzig sinnvolle, was mir die Doku hergab war mittels Schleife und split() immer 9 wørter ( die erste Zeile ignorieren wir mal ) einzeln in eine Liste zu legen. Das sollte ich hinbekommen, allerdings frag ich mich, ob es auch einfacher geht ?
Danke fuer kommende Ideen :0)
Mfg Gunnar
P.S.
Die Suche im Forum ergab auch nur eine Kombination von Schleifen und split(). Leider bin ich einfach zu neu, um mich mit allen vorhandenen Modulen, Methoden und Objekten auszukennen...sorry
Datei øffnen und Zeile fuer Zeile in Liste einlesen
Also wenn alles durch leerzeichen getrennt werden solle biete sich readline des fileobjektes an.Gunnar hat geschrieben:
Ich møchte nun nacheinander jeweils eine Zeile in eine Liste packen ( also alles was durch tab / leerzeichen getrennt ist auf einen eigenen Index )
um vernuenftig mit den einzelnen Daten arbeiten zu kønnen.
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi Gunnar,
Dateien können auch als Quasilistenartige Objekte (Iterable) behandelt werden, wobei die Elemente dann die einzelnen Zeilen sind. So können sie auch mit Listcomprehensions bearbeitet werden:
Falls Du die erste Zeile nicht brauchst, machst du einfach
Gruß
Dookie
Dateien können auch als Quasilistenartige Objekte (Iterable) behandelt werden, wobei die Elemente dann die einzelnen Zeilen sind. So können sie auch mit Listcomprehensions bearbeitet werden:
Code: Alles auswählen
f = file("dingens.txt", "r")
data = [z.rstrip().split() for z in f]
f.close()
Code: Alles auswählen
data = [z.rstrip().split() for z in f][1:]
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
Danke erstmal fuer die Antworten soweit. Ich probier es gleich einmal auf deine Art und Weise aus Dookie. Ich bin næmlich mit dem Abfragemodul endlich fertig *schwitz*
Ich gebe nochmal ein Feedback, wenn das Auslesen so funktioniert, wie ich will :0)
Bis spæter,
Gunnar

Ich gebe nochmal ein Feedback, wenn das Auslesen so funktioniert, wie ich will :0)
Bis spæter,
Gunnar

Kurz mal offtopic gefragt: Sind bei Euch die Umlaute in Gunnars Postings auch andere Zeichen, oder stimmt was mit meinem Browser nicht?
fs111
fs111
Pydoc-Integration in vim - Feedback willkommen: http://www.vim.org/scripts/script.php?script_id=910
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi fs111,
Gunnar scheint aus Schweden oder einem anderen skandinavischen Land ins Forum zu kommen. Daher die für uns seltsamen Sonderzeichen/Umlaute.
Dookie
Gunnar scheint aus Schweden oder einem anderen skandinavischen Land ins Forum zu kommen. Daher die für uns seltsamen Sonderzeichen/Umlaute.
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]

Um genau zu sein : Norwegen
Ja, ich sitze hier tatsæchlich in Norwegen und schreibe ein Script fuer die deutsche Wirtschaft. Ist es nicht zuvorkommend ?

Um wieder auf den Topic zurueck zu kommen :
Der Scriptfetzen, den du mir gegeben hast Dookie, funktioniert perfekt. Das Script ist noch nicht fertig, aber ich hab' gesehen, dass er eine Liste in einer Liste erzeugt, was fuer meine Zwecke nahezu perfekt ist.
Kannst du mir einen Gefallen tun, damit bei mir auch ein bisschen mehr Lerneffekt ist ? Erklære mir folgendes :
Diese Iterable, wo finde ich in der Doku die genaue Beschriebung, wie ich so etwas erstelle ?
Und dann kann ich eigentlich dein gesamtes Script nachvollziehen, bis auf die genaue Funktion von rstrip() ( in der Doku steht : schneidet die Whitespaces usw. weg ) Bloss woher weiss dein Script, dass es Zeilenweise einlesen soll...kommt das von diesem ominøsen "z" ? Ich bin leider noch nicht so weit in diese Sprache vorgestossen, als das ich mir das erklæren kønnte.
Danke dir ( ich hoffe das war nicht zu verfrickeltes Deutsch, das hab' ich hier næmlich verlernt ;0) )
Mfg Gunnar
Hi, ich bin zwar nicht Dookie, aber antworten kann ich ja trotzdem
. Dookie bedieht sich hier der List Comprehensions, mit denen man die Funktionen map und filter ersetzen kann. Es wird eine Funktion auf alle Elemente eines Iterables (z.B. einer Liste oder eines Dictionarys) angewendet. Vereinfach kannst du das auch so schreiben:
Das man einfach for z in f schreiben kann, liegt daran, dass eine Datei auch ein Iteratorobjekt ist. Hä? Was ist das? Das ist grob gesagt ein Objekt, was man durch eine for-Schleife quetschen kann und in dem Fall werden immer die Zeilen zurückgegeben. Das ganze hab ich schonmal hier ausführlich erklärt *faulsei*
. Nun hast du also in z eine einzelne Zeile und diese beinhaltet noch einen Zeilenumsprung ("\n"). Den trennt Dookie immer mit rstrip() ab, da dieser auch als Freiziechen gewertet wird, genau wie ein Leerzeichen. Ich benutze dafür immer replace("\n",""), aber das ist Geschmackssache. Zum Schluss willst du die einzelnen Wörter haben, deswegen wird noch einmal gesplittet und fertig sind wir.
Die ganzen Stringfunktionen findest auch in der Docu und hier steht alles zu Dateien, da findest du auch raus (wenn du weißt wie Iteratoren funktionieren), warum eine Datei sich so Zeilenweise lesen lässt.
So, jetzt hab ich dich ganz schön mit Material zugebombt... Meld dich einfach, wenn du weitere Fragen hast.
mfg Milan

Code: Alles auswählen
erg=[]
for z in f:
erg.append(z.rstrip().split())
data=erg[1:]

Die ganzen Stringfunktionen findest auch in der Docu und hier steht alles zu Dateien, da findest du auch raus (wenn du weißt wie Iteratoren funktionieren), warum eine Datei sich so Zeilenweise lesen lässt.
So, jetzt hab ich dich ganz schön mit Material zugebombt... Meld dich einfach, wenn du weitere Fragen hast.
mfg Milan
Zuletzt geändert von Milan am Samstag 23. Oktober 2004, 18:33, insgesamt 1-mal geändert.
Das mit den Iteratorobjekten ist mir jetzt verstændlich, dann hab' ich jetzt nicht mehr nur Fragezeichen um den Kopf, nur weil ich fremden Code mit eingebaut habe
Takk skal du har !
Allerdings, und ich weiss nicht, ob ich nicht einen neuen Thread aufmachen muesste...
...stehe ich vor einem neuen Problem :
Nachdem ich die Zahlen soweit manipuliert und in Listen hin und her kopiert habe, wie ich es wollte, muss ich die Ausgabe ( die ein String sein muss !! ) in einen String umwandeln. Es gibt viele Funktionen wie long(), int(), float() usw. , die mir die strings in Zahlenwerte umwandeln. Gibt es auch eine Funktion, die Zahlen in einen String verwandelt ?
Es kann gut sein, dass ich es in der Doku nur uebersehen habe, aber dort war nichts zu finden...

Takk skal du har !
Allerdings, und ich weiss nicht, ob ich nicht einen neuen Thread aufmachen muesste...
...stehe ich vor einem neuen Problem :
Nachdem ich die Zahlen soweit manipuliert und in Listen hin und her kopiert habe, wie ich es wollte, muss ich die Ausgabe ( die ein String sein muss !! ) in einen String umwandeln. Es gibt viele Funktionen wie long(), int(), float() usw. , die mir die strings in Zahlenwerte umwandeln. Gibt es auch eine Funktion, die Zahlen in einen String verwandelt ?
Es kann gut sein, dass ich es in der Doku nur uebersehen habe, aber dort war nichts zu finden...
Hi. Ja: mit str
. DAnn gibt es da auch noch repr, aber die wird für was anderes genutzt. Das kannst du dir ja mal verdeutlichen, indem du eine gleitkommazahl mit str und mit repr umwandelst. Str liefert den Wert, den man für Texte braucht und repr den, der das Objekt möglichst genau beschreibt, sodass man vom String aus wieder zum ursprünglichen Objekt zurück kommt.

-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi nochmal,
es gibt neben str noch die Möglichkeit Daten in Strings hineinzumischen, was für deine Anwendung vielleicht interessant ist:
Statt eines Tuples kann auch eine Liste oder ein anderes Iterable-Objekt verwendet werden.
Weitere Informationen dazu findest Du auf:
http://www.python.org/doc/current/lib/t ... rings.html
Man kann sich solche Formatstrings auch mit Informationen zu z.B. Listen zusammenbauen.
Wobei die Version mit dem % wenn der Formatstring für mehrere Listen (Iterable) verwendet werden soll vorzuziehen ist.
Gruß
Dookie
es gibt neben str noch die Möglichkeit Daten in Strings hineinzumischen, was für deine Anwendung vielleicht interessant ist:
Code: Alles auswählen
tpl = "Hier kommt ein Float %3.2f mit 3 Vorkomma- und zwei Nachkommastellen"
print tpl % 3.1415
tpl = "Hier mal 3 verschieden Werte %s %i %x"
print tpl % (repr("Hallo"), 3, 125)
print '%(language)s has %(#)03d quote types.' % {'language': "Python", "#": 2}
Weitere Informationen dazu findest Du auf:
http://www.python.org/doc/current/lib/t ... rings.html
Man kann sich solche Formatstrings auch mit Informationen zu z.B. Listen zusammenbauen.
Code: Alles auswählen
a = [1,3,2,5,4,7,6]
tpl = "Daten: " + (", ".join(["%i"]*len(a)))
print tpl % a
#oder mit Listcomprehension
print "Daten: " + ", ".join([str(x) for x in a])
Gruß
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
Ah ok...
Fuer meine Anwendung ist es schon in Ordnung, das alles immer komplett in Interger umzuwandeln und zurueck. Allerdings kann ich mir schon vorstellen, dass man damit bei einigen Anwendungen schnell an eine Wand fæhrt... ( hups..nun bekomme ich nie wieder meine Gleitkommazahl hin ;0) )
Danke, fuer die schnellen und netten Antworten...jetzt such ich mir noch die copy und rename funktionen raus und dann muesste ich das Script schon morgen fertig haben.
Hilse fra Gunnar i Norge !!

Fuer meine Anwendung ist es schon in Ordnung, das alles immer komplett in Interger umzuwandeln und zurueck. Allerdings kann ich mir schon vorstellen, dass man damit bei einigen Anwendungen schnell an eine Wand fæhrt... ( hups..nun bekomme ich nie wieder meine Gleitkommazahl hin ;0) )
Danke, fuer die schnellen und netten Antworten...jetzt such ich mir noch die copy und rename funktionen raus und dann muesste ich das Script schon morgen fertig haben.

Hilse fra Gunnar i Norge !!
Gunnar hat geschrieben:Takk skal du har !
Nochmal Offtopic: Nur mal so aus Interesse, was heißt das eigentlich? Es heißt ja, nordische Sprachen haben große Ähnlichkeit mit unserem deutsch, aber was darauf reimen kann ich mir nicht...Gunnar hat geschrieben:Hilse fra Gunnar i Norge !!


Wenn man es einfach Deutsch ausspricht...und dann am besten auch noch aus dem Norden Deutschlands kommt ( Plattdeutsch ) Versteht man einiges davon auf Anhieb.
Takk skal du har = ( direkt ) Dank sollst du haben
Bei uns eher = Dankeschøn
Alternativ = tusen takk ( tausend Dank )
Hilse fra Gunnar i Norge = ( direkt ) Gruesse von Gunnar in Norwegen
Bei uns eher = Gruss aus Norwegen, Gunnar
Habt ihr nicht einfach mal das hier versucht ? :

Takk skal du har = ( direkt ) Dank sollst du haben
Bei uns eher = Dankeschøn
Alternativ = tusen takk ( tausend Dank )
Hilse fra Gunnar i Norge = ( direkt ) Gruesse von Gunnar in Norwegen
Bei uns eher = Gruss aus Norwegen, Gunnar
Habt ihr nicht einfach mal das hier versucht ? :
Code: Alles auswählen
from norway import language
hirn.append(language(in_zarten_stuecken))

Hi. Gibt bei mir nen ImportError... aber dafür funktioniert das hier:
Und du hast mir gerade das Modul geliefert 
thx, Milan
Code: Alles auswählen
import sys
from language import norway
sys.stdout.write(norway.translate(fach_chinesisch))

thx, Milan