Seite 1 von 2

Textdatei aus dem Internet lesen..?

Verfasst: Mittwoch 5. März 2008, 19:19
von Teabag
Hallo Leute..
Ich will eine phpdatei mit einem python programm lesen, und dann in eine txt datei speichern...
Dafür habe ich folgenden Script:

Code: Alles auswählen

import urllib
def reader():
    datei = open("text.txt")
    inp = urllib.urlretrieve("http://myurl.de/home.php","text.txt")
reader()
Nun hätte ich aber gerne dass Nur die Lezte zeile aus der php seite gespeichert wird.
Mit readlines geht das nicht??
Wie geht das?
Schon mal vielen Dank

Gruß Teabag

Re: Textdatei aus dem Internet lesen..?

Verfasst: Mittwoch 5. März 2008, 19:42
von gerold
Teabag hat geschrieben:Nun hätte ich aber gerne dass Nur die Lezte zeile aus der php seite gespeichert wird.
Hallo Teabag!

Z.B. so:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

import urllib2

# Diese Konstante gibt an, wie viele (letzte) Zeilen gespeichert werden
LAST_X_LINES = 3


def reader():
    # In dieser Liste werden die Zeilen zwischengespeichert
    last_lines = []
    # Eine HTTP-Anfrage wird gestartet. Als Rückgabe gibt es ein REQUEST-Objekt.
    # Man kann über ein REQUEST-Objekt iterieren -- gleich wie durch die
    # Zeilen einer Textdatei
    request = urllib2.urlopen("http://halvar.at/")
    # Hier wird durch die einzelnen Zeilen des Requests iteriert
    for line in request:
        # Wenn die Zeile, nach dem Abschneiden der unsichtbaren Zeichen an rechter
        # Seite, noch etwas enthält, dann...
        if line.rstrip():
            # Zeile zur Liste hinzufügen
            last_lines.append(line)
            # Wenn die Länge der Liste (last_lines) größer als die Konstante LAST_X_LINES ist, dann...
            if len(last_lines) > LAST_X_LINES:
                # ...ersten Eintrag aus der Liste entfernen
                last_lines.pop(0)
    # Request-Objekt schließen
    request.close()
    # Falls etwas in der Liste steht, dann...
    if last_lines:
        # Zieldatei zum Schreiben öffnen
        dest_file = file("zieldatei.txt", "w")
        # Die Zeilen, die noch in der Liste "last_lines" stehen, werden in die
        # Datei geschrieben.
        dest_file.writelines(last_lines)
        # Zieldatei schließen
        dest_file.close()
    print last_lines


reader()
mfg
Gerold
:-)

Verfasst: Mittwoch 5. März 2008, 19:46
von Teabag
Dankeschön, hm ich versteh den code zwar noch nicht richtig,.. bin Anfänger^^
Kann ich auch eine bestimmte Zeile rauslesen?
Also.. statt der Letzten die 5. oder sowas.
Was sind LAST_X_LINES?, kann ich hier die Zeile bestimmen?
Was heißt rstrip?
Und was macht last_lines.pop(0)
Sry für die vielen Fragen.^^

Gruß Teabag

Verfasst: Mittwoch 5. März 2008, 19:54
von gerold
Teabag hat geschrieben:hm ich versteh den code zwar noch nicht richtig,.. bin Anfänger^^
Hallo Teabag!

Ich kommentiere den Code mal ein wenig... dauert ein paar Minuten.

mfg
Gerold
:-)

ok

Verfasst: Mittwoch 5. März 2008, 20:01
von Teabag
Vielen Dank

Verfasst: Mittwoch 5. März 2008, 20:05
von gerold
...erledigt!

Verfasst: Mittwoch 5. März 2008, 20:15
von Teabag
Vielen Dank, jetzt ist mir einiges klarer.
# Wenn die Zeile, nach dem Abschneiden der unsichtbaren Zeichen an rechter
# Seite, noch etwas enthält, dann...
Das versteh ich noch nicht ganz. Welche unsichtbaren Zeichen? an der Rechten Seite?

Verfasst: Mittwoch 5. März 2008, 20:22
von Leonidas
Mit unsichtbaren Zeichen meint Gerold Whitespace. Es geht darum, dass Zeilen die nur Newlines, Leerzeichen oder Tabs enthalten, nicht verarbeitet werden.

Verfasst: Mittwoch 5. März 2008, 20:38
von gerold
Hallo Teabag!

Eine Frage ist ja noch nicht beantwortet.

Wenn du das Befüllen der Liste nicht an Bedingungen knüpfst, dann könnte das so ausshen:

Code: Alles auswählen

    for line in request:
        # Zeile zur Liste hinzufügen
        last_lines.append(line) 
Stattdessen kannst du auch ``last_lines = request.readlines()`` schreiben.

Jetzt ist in der Liste jede einzelne Zeile des Requests drinnen. -- Der Name "last_lines" passt jetzt natürlich nicht mehr. -- Und du kannst z.B. mit ``last_lines[10]`` auf die Zeile 11 zugreifen. Oder mit ``last_lines[5:10]`` auf ausgewählte Zeilen.

mfg
Gerold
:-)

Hey

Verfasst: Mittwoch 5. März 2008, 23:12
von Teabag
Vielen Dank,
Ihr seit echt Klasse!!!
...
Aber jetzt noch eine Frage ;-)
Kann man auch die Zeichezahl in der Zeile bestimmen?
Ich kann jetzt schon z.B. Zeile 11 printen lassen.
Dcoh kann man auch Zeile 11 zeichen 21 printen lassen?
Geht das?

Dickes Lob an Euch!!!


Gruß Teabag

Verfasst: Mittwoch 5. März 2008, 23:22
von audax

Code: Alles auswählen

my_list = ["Ich bin eine Liste", "die mit Strings gefüllt ist, ", "Strings wie
diesem hier!"]

print my_list[0][4:8] + my_list[1][8:14] + my_list[0][12:] + my_list[2][10]
-> bin String Liste
Strings sind auch nur Listen.

Verfasst: Mittwoch 5. März 2008, 23:31
von Leonidas
audax hat geschrieben:Strings sind auch nur Listen.
Nein. Strings sind slicebar, aber sie sind immutable, also eher mit Tupeln vergleichbar.

Verfasst: Mittwoch 5. März 2008, 23:38
von audax
Besserwisser.


Besser wäre wirklich gewesen, ich hätte "Strings sind auch nur immutable slicable!" geschrieben. Da wäre ihm sicher gleich alles klar gewesen.

Verfasst: Donnerstag 6. März 2008, 10:11
von gerold
audax hat geschrieben:Besserwisser.
Besser wäre wirklich gewesen, ich hätte "Strings sind auch nur immutable slicable!" geschrieben. Da wäre ihm sicher gleich alles klar gewesen.
Hallo audax!

Ich bin zwar kein Freund von solchem Fachchinesisch. Aber die Aussage "Strings sind auch nur Listen" ist falsch und vermittelt etwas falsches.

Wie wäre es mit: "Du kannst die einzelnen Zeichen aus einem String genau so auslesen, wie du einzelne Einträge einer Liste auslesen kannst. Z.B. so: ``my_text[4]``."

:wink:

lg
Gerold
:-)

Verfasst: Donnerstag 6. März 2008, 10:12
von Leonidas
audax hat geschrieben:Besserwisser.
Ich wollt an der Stelle nicht klugscheißern sondern es klarstellen, dass Strings eher mit Tupeln vergleichbar sind als mit Listen. Eigentlich sind ja Strings weder Tupel noch Listen :)

Verfasst: Donnerstag 6. März 2008, 11:33
von BlackJack
Es sind auch Sequenzen. :-)

Verfasst: Donnerstag 6. März 2008, 15:09
von Teabag
HI, ich versteh den Code nicht wirklich...
Was bedeuten Die zahlen in den Klammern? [4:8] ...
Und was sind das für strings in der Liste?
Kurzum...
...ich versteh den code nicht...?

Gruß Teabag

Verfasst: Donnerstag 6. März 2008, 15:11
von audax
Du solltest das Tutorial von python.org nochmal durcharbeiten.

Wirklich wirklich wirklich.

Verfasst: Donnerstag 6. März 2008, 16:41
von Teabag
Gibts auch ähliche Tutorials, die Deutsch sind?
Weil mit einem Englishen Tut ist das ein bischen schwierig...

Verfasst: Donnerstag 6. März 2008, 16:43
von gerold
Teabag hat geschrieben:Gibts auch ähliche Tutorials, die Deutsch sind?
Hallo Teabag!

http://www.python-forum.de/post-91351.html#91351

[wiki]FAQ[/wiki]

mfg
Gerold
:-)