ubuntuusers.de

Fragen zu Python

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

BodomBeachTerror

Anmeldungsdatum:
24. März 2008

Beiträge: 788

Hey Ubuntuusers!

Ich wollte mal wissen wie man mit dem Befehl 'print' abgewöhnt immer automatisch eine neue Zeile zu zeichnen, des weiteren wollte ich wissen wie man bei einer Datei herausbekommt ob man schon am Ende ist. Gibt es da so eine Funktion wie eof() oder so was?

Es kommen bestimmt noch mehr Fragen. Danke schon mal 😉

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4686

Wohnort: Berlin

Ein , am Ende verhindert den Zeilenumbruch. Es wird aber ein Leerzeichen ausgegeben. Wenn Du das nicht magst, musst Du sys.stdout zur Ausgabe verwenden, da hast Du volle Kontrolle über die Ausgabe.

Eine eof()-Funktion gibt's so nicht. In welchem Zusammenhang brauchst Du die denn? Normalerweise erkennt man das Ende einer Datei daran, dass eine Leseoperation eine leere Zeichenkette liefert, also als Wahrheitswert betrachtet "falsch" ist. Ansonsten würde ich aber immer versuchen eine for-Schleife zu verwenden, zum Beispiel direkt über das Dateiobjekt, was die Zeilen liefert. Wenn man gleichgrosse Blöcke lesen will kann man sich einen Iterator über die Blöcke mit dem Dateiobjekt, functools.partial(), und der iter()-Funktion bauen.

BodomBeachTerror

(Themenstarter)

Anmeldungsdatum:
24. März 2008

Beiträge: 788

OK danke erstmal

Wie genau mache ich das denn mit der for Schleife? Ich habe da ein Beispiel gesehen bei dem jemand das Objekt mit der Zahl verglichen hat glaub ich. Geht das so?

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4686

Wohnort: Berlin

Was genau willst Du denn mit der for-Schleife machen? Über Zeilen iterieren? Oder über gleichgrosse Blöcke?

1
2
3
4
5
6
for line in my_file:
    print line

block_size = 1024
for block in iter(functools.partial(my_file.read, block_size), ''):
    print block

BodomBeachTerror

(Themenstarter)

Anmeldungsdatum:
24. März 2008

Beiträge: 788

Ja über Zeilen und diese dann in ein Array speichern.

Fredo Team-Icon

Avatar von Fredo

Anmeldungsdatum:
27. Juni 2005

Beiträge: 5244

Wohnort: Bochum

BodomBeachTerror schrieb:

Ja über Zeilen und diese dann in ein Array speichern.

my_file.readlines()?

Genau genommen gibt es in Python übrigens keine Datenstruktur namens "Array" 😉

Liebe Grüße
Fredo

Ferio Team-Icon

Avatar von Ferio

Anmeldungsdatum:
24. April 2007

Beiträge: 383

Fredo schrieb:

Genau genommen gibt es in Python übrigens keine Datenstruktur namens "Array" 😉

Doch es gibt eine(array.array), aber ich glaube nicht, dass der OP das will.

BodomBeachTerror

(Themenstarter)

Anmeldungsdatum:
24. März 2008

Beiträge: 788

@Fredo

Ja genau mit readline() jetzt brauche ich das ganze nur noch in einer for Schleife bis die Datei zu Ende ist, ich weiß eben bloß nicht wie ich überprüfen soll ob sie zu Ende ist.

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4686

Wohnort: Berlin

@BodomBeachTerror: Erstens habe ich Dir schon gesagt wie man das Ende erkennt, zweitens brauchst Du das doch überhaupt nicht weil die readlines()-Methode, die Fredo schon genannt hat – bitte den Namen genau lesen, denn readline != readlines – liefert eine Liste mit den Zeilen.

Alternativ könntest Du auch einfach list() auf das Dateiobjekt anwenden.

Und in vielen Fällen kann man sich das komplette Einlesen auf einen Schlag auch sparen und Dateien Zeilenweise verarbeiten.

BodomBeachTerror

(Themenstarter)

Anmeldungsdatum:
24. März 2008

Beiträge: 788

Oh sorry stimmt 😳

Dann danke an euch, aber kann mir jemand vielleicht so eine for Schleife mal als Beispiel machen das wäre nett, danke 😀

phst

Anmeldungsdatum:
24. Juni 2007

Beiträge: 527

BodomBeachTerror schrieb:

Oh sorry stimmt 😳

Dann danke an euch, aber kann mir jemand vielleicht so eine for Schleife mal als Beispiel machen das wäre nett, danke 😀

Das Beispiel wurde schon längst gepostet. Lies doch bitte vor dem Schreiben erst einmal die Antworten!

Fredo Team-Icon

Avatar von Fredo

Anmeldungsdatum:
27. Juni 2005

Beiträge: 5244

Wohnort: Bochum

Ferio schrieb:

Fredo schrieb:

Genau genommen gibt es in Python übrigens keine Datenstruktur namens "Array" 😉

Doch es gibt eine(array.array), aber ich glaube nicht, dass der OP das will.

Ach, cool, da lernt man ja immer wieder was dazu! ☺

Ich denke, sowas kann ich bestimmt noch mal brauchen. Oft hat eine Liste ja wirklich nur Objekte des gleichen Typs, da könnte man ja auch gleich einen Array nehmen.

Liebe Grüße
Fredo

BodomBeachTerror

(Themenstarter)

Anmeldungsdatum:
24. März 2008

Beiträge: 788

Tatsache, tut mir Leid 😀

Danke an euch hat mir sehr geholfen 😉

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4686

Wohnort: Berlin

@Fredo: So nützlich ist array.array nicht, weil es nicht beliebige Objekte speichert und langsamer im Zugriff ist als eine Liste, weil die enthaltenen Typen immer zwischen Python-Objekten und der internen Darstellung hin und her konvertiert werden müssen.

Fredo Team-Icon

Avatar von Fredo

Anmeldungsdatum:
27. Juni 2005

Beiträge: 5244

Wohnort: Bochum

Marc 'BlackJack' Rintsch schrieb:

@Fredo: So nützlich ist array.array nicht, weil es nicht beliebige Objekte speichert und langsamer im Zugriff ist als eine Liste, weil die enthaltenen Typen immer zwischen Python-Objekten und der internen Darstellung hin und her konvertiert werden müssen.

Ah, ok. Ich hätte vermutet, dass es effizienter und schneller ist, wenn nur ein Datentyp verwendet wird. Na, dann vergesse ich es ganz schnell wieder... 😉

Liebe Grüße
Fredo

Antworten |