Textdatei aus dem Internet lesen..?

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.
Teabag
User
Beiträge: 81
Registriert: Sonntag 13. Mai 2007, 20:44

Mittwoch 5. März 2008, 19:19

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 5. März 2008, 19:42

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
:-)
Zuletzt geändert von gerold am Donnerstag 6. März 2008, 10:20, insgesamt 2-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Teabag
User
Beiträge: 81
Registriert: Sonntag 13. Mai 2007, 20:44

Mittwoch 5. März 2008, 19:46

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 5. März 2008, 19:54

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Teabag
User
Beiträge: 81
Registriert: Sonntag 13. Mai 2007, 20:44

Mittwoch 5. März 2008, 20:01

Vielen Dank
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 5. März 2008, 20:05

...erledigt!
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Teabag
User
Beiträge: 81
Registriert: Sonntag 13. Mai 2007, 20:44

Mittwoch 5. März 2008, 20:15

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?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 5. März 2008, 20:22

Mit unsichtbaren Zeichen meint Gerold Whitespace. Es geht darum, dass Zeilen die nur Newlines, Leerzeichen oder Tabs enthalten, nicht verarbeitet werden.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 5. März 2008, 20:38

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Teabag
User
Beiträge: 81
Registriert: Sonntag 13. Mai 2007, 20:44

Mittwoch 5. März 2008, 23:12

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
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Mittwoch 5. März 2008, 23:22

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.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 5. März 2008, 23:31

audax hat geschrieben:Strings sind auch nur Listen.
Nein. Strings sind slicebar, aber sie sind immutable, also eher mit Tupeln vergleichbar.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Mittwoch 5. März 2008, 23:38

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.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 6. März 2008, 10:11

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 6. März 2008, 10:12

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 :)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten