Hompage erstellen.

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
Sülo
User
Beiträge: 29
Registriert: Dienstag 4. Mai 2021, 09:58

Hey liebe Freunde also ich bin’s wieder jetzt bin ich wieder auf Granit gestoßen. Ich soll eine Datei erstellen die nicht nur eine .TXT Datei einliest sondern auch daraus eine Homepage macht.
Folgendes hab ich jetzt gemacht:

#VariableName

def main():

name = input("geben Sie bitte Ihren Namen ein: ")
file = name + '.txt'
infile = open(file, 'r')
description = infile.readline()
name1 = name

infile.close()

outfile = open('homepage.html', 'w')

outfile.write("""<html>
<head>
<title>My Personal Web Page</title>
</head>
<body>
<center>
<h1>""" + name1 + """</h1>
</center>
<hr />"""
+ description + """
<hr />
</body>
</html>""")

outfile.close()

main()

Lass ich die jetzt laufen bekomme ich die Fehlermeldung

Traceback (most recent call last):
File "/private/var/mobile/Containers/Shared/AppGroup/929F748D-4A39-44E4-A1F7-8DC0847C6EDA/File Provider Storage/Uni Stuff/Python/Aufgabe_2.4_Team_20.py", line 31, in <module>
main()
File "/private/var/mobile/Containers/Shared/AppGroup/929F748D-4A39-44E4-A1F7-8DC0847C6EDA/File Provider Storage/Uni Stuff/Python/Aufgabe_2.4_Team_20.py", line 13, in main
outfile = open('homepage.html', 'w')
PermissionError: [Errno 1] Operation not permitted: 'homepage.html'


Kann mir einer erklären warum oder wo mein Fehler liegt? Mach das ganze auf meinem IPad liegt es vielleicht daran?

Ich danke jetzt schonmal im Vorraus
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

für das Verzeichnis, in dass du schreiben möchtest, hast du keine Schreibrechte. Warum auch immer. Kann schon an iOS liegen. Die ganzen mobilen OS sind ja ziemlich restriktiv, was das angeht.

Gruß, noisefloor
Sülo
User
Beiträge: 29
Registriert: Dienstag 4. Mai 2021, 09:58

noisefloor hat geschrieben: Donnerstag 9. Dezember 2021, 13:05 Hallo,

für das Verzeichnis, in dass du schreiben möchtest, hast du keine Schreibrechte. Warum auch immer. Kann schon an iOS liegen. Die ganzen mobilen OS sind ja ziemlich restriktiv, was das angeht.

Gruß, noisefloor

Ich danke dir das ist so nervig-.-
Ich hab mal unserem Dozenten geschrieben, mal stehen was er dazu sagt
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

na ja, ein iPad ist generell nicht die ideale Umgebung zum Entwickeln - eben wegen der Einschränkungen, was Zugriffe auf Verzeichnisse etc angeht.
Plus du bist ja auch limitiert, was das nachinstallieren von Modulen angeht.

Zum Code:
Strings setzt man nicht mit + zusammen, dafür gibt es ab Python 3.6 f-Strings oder alternativ die format-Methode von Strings.
Zum Öffen von Dateien nutzt man besser das `with` Statement, dann kümmert sich Python um da Schließen der Datei.
Für das Zusammensetzen von Dateiname gibt es die pathlib.
Damit das HTML formell richtiger ist sollte `<!DOCTYPE html>` in die erste Zeile.

Gruß, noisefloor
Sülo
User
Beiträge: 29
Registriert: Dienstag 4. Mai 2021, 09:58

noisefloor hat geschrieben: Donnerstag 9. Dezember 2021, 14:03 Hallo,

na ja, ein iPad ist generell nicht die ideale Umgebung zum Entwickeln - eben wegen der Einschränkungen, was Zugriffe auf Verzeichnisse etc angeht.
Plus du bist ja auch limitiert, was das nachinstallieren von Modulen angeht.

Zum Code:
Strings setzt man nicht mit + zusammen, dafür gibt es ab Python 3.6 f-Strings oder alternativ die format-Methode von Strings.
Zum Öffen von Dateien nutzt man besser das `with` Statement, dann kümmert sich Python um da Schließen der Datei.
Für das Zusammensetzen von Dateiname gibt es die pathlib.
Damit das HTML formell richtiger ist sollte `<!DOCTYPE html>` in die erste Zeile.

Gruß, noisefloor
Danke ich Versuch es mal auch wenn ich nur 20% davon verstanden habe😂😂
Ja ich brauch das IPad eher für das restliche Studium ich hab nun mal 1 Semester Bauinformatik und da muss ich auch durch😂

Ich danke dir trotzdem
Gruß Sülo
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum bindest Du `name` and `name1`? Was ist der Sinn dahinter und was ist die Bedeutung der 1?
HTLM stückelt man nicht mit + zusammen und benutzt auch keine f-Strings, sondern eine passende Template-Engine, die auch dafür sorgt, dass Sonderzeichen in `name` oder `description` auch richtig codiert werden.
Beim Lesen und Schreiben von Text-Dateien sollte man immer das richtige Encoding angeben.
Sülo
User
Beiträge: 29
Registriert: Dienstag 4. Mai 2021, 09:58

Sirius3 hat geschrieben: Donnerstag 9. Dezember 2021, 14:56 Warum bindest Du `name` and `name1`? Was ist der Sinn dahinter und was ist die Bedeutung der 1?
HTLM stückelt man nicht mit + zusammen und benutzt auch keine f-Strings, sondern eine passende Template-Engine, die auch dafür sorgt, dass Sonderzeichen in `name` oder `description` auch richtig codiert werden.
Beim Lesen und Schreiben von Text-Dateien sollte man immer das richtige Encoding angeben.
Okey das mit dem Namen hab ich geändert also ich bin absoluter beginner was das Codieren betrifft daher sagt mir Template-Engine nichts😔😔
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Sülo hat geschrieben: Donnerstag 9. Dezember 2021, 15:00Okey das mit dem Namen hab ich geändert also ich bin absoluter beginner was das Codieren betrifft daher sagt mir Template-Engine nichts😔😔
Deswegen hat dir Sirius3 netterweise Begriffe genannt, nach denn du googlen kannst: https://www.google.com/search?q=python+html+template+engine
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

`Path`-Objekte haben da netterweise gleich Methoden um komplette Textdateien zu lesen und zu schreiben, so dass man sich mit dem öffnen und schliessen der Datei gar nicht mehr selbst beschäftigen muss.

<center> ist seit HTML 4 „deprecated“ und sollte dementsprechend nicht mehr verwendet werden. Bei so einem kleinen HTML-Schnippsel kann man das Zentrieren als "style"-Attribut setzen. Bei einer umfangreicheren Seite würde man das als CSS für <h1> mitgeben oder gegebenfalls noch eine Klasse dafür definieren.

Ergänzend zur Anmerkung von Sirius3 bezüglich der Kodierung: Die muss auch im HTML selbst angegeben werden. Man kann die Angabe in HTML 5 auch weglassen, aber dann fängt der Browser an zu raten und das kann schief gehen.

Ungetestet:

Code: Alles auswählen

#!/usr/bin/env python3
import html
from pathlib import Path

ENCODING = "UTF-8"


TEMPLATE = """\
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="{encoding}">
    <title>My Personal Web Page</title>
</head>
<body>
    <h1 style="text-align: center;">{name}</h1>
    <hr>
    {description}
    <hr>
</body>
</html>
"""


def main():
    name = input("Geben Sie bitte Ihren Namen ein: ")
    try:
        description = (
            Path(name).with_suffix(".txt").read_text(encoding=ENCODING)
        )
    except FileNotFoundError:
        description = "No description."

    Path("homepage.html").write_text(
        TEMPLATE.format(
            description=html.escape(description),
            encoding=ENCODING,
            name=html.escape(name),
        ),
        encoding=ENCODING,
    )


if __name__ == "__main__":
    main()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Sülo
User
Beiträge: 29
Registriert: Dienstag 4. Mai 2021, 09:58

__blackjack__ hat geschrieben: Donnerstag 9. Dezember 2021, 16:46 `Path`-Objekte haben da netterweise gleich Methoden um komplette Textdateien zu lesen und zu schreiben, so dass man sich mit dem öffnen und schliessen der Datei gar nicht mehr selbst beschäftigen muss.

<center> ist seit HTML 4 „deprecated“ und sollte dementsprechend nicht mehr verwendet werden. Bei so einem kleinen HTML-Schnippsel kann man das Zentrieren als "style"-Attribut setzen. Bei einer umfangreicheren Seite würde man das als CSS für <h1> mitgeben oder gegebenfalls noch eine Klasse dafür definieren.

Ergänzend zur Anmerkung von Sirius3 bezüglich der Kodierung: Die muss auch im HTML selbst angegeben werden. Man kann die Angabe in HTML 5 auch weglassen, aber dann fängt der Browser an zu raten und das kann schief gehen.

Ungetestet:

Code: Alles auswählen

#!/usr/bin/env python3
import html
from pathlib import Path

ENCODING = "UTF-8"


TEMPLATE = """\
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="{encoding}">
    <title>My Personal Web Page</title>
</head>
<body>
    <h1 style="text-align: center;">{name}</h1>
    <hr>
    {description}
    <hr>
</body>
</html>
"""


def main():
    name = input("Geben Sie bitte Ihren Namen ein: ")
    try:
        description = (
            Path(name).with_suffix(".txt").read_text(encoding=ENCODING)
        )
    except FileNotFoundError:
        description = "No description."

    Path("homepage.html").write_text(
        TEMPLATE.format(
            description=html.escape(description),
            encoding=ENCODING,
            name=html.escape(name),
        ),
        encoding=ENCODING,
    )


if __name__ == "__main__":
    main()
Ich hab das mal kopiert und versucht leider passiert da nichts außer das er nach dem Namen fragt…die Aufgabenstellung ist halt das wir eine .txt Datei erstellen sollen mit paar Informationen über uns und dann soll daseine Homepage gemacht werden….ich verstehe es einfach nicht🤷🏽‍♂️🤷🏽‍♂️🤦🏽‍♂️ Ist ja auch egal ich danke trotzdem für die Hilfe
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Was hast du denn gedacht, was passiert?
Sülo
User
Beiträge: 29
Registriert: Dienstag 4. Mai 2021, 09:58

sparrow hat geschrieben: Donnerstag 9. Dezember 2021, 18:24 Was hast du denn gedacht, was passiert?
Das er die .txt Datei die ich vorher verfasst habe öffnet
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Wo soll sich die denn öffnen?
Und mit welchem Befehl im Code soll das passieren?

So wie ich den Code lese ist die Abfrage der Eingabe das Einzige, was an Interaktion passiert. Ob da eine Datei gelesen oder geschrieben wird, wirst du optisch wohl nicht mitkriegen.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

meinst du, dass `open` die Datei öffnet? Ja, macht der Befehl auch, aber halt auf Betriebssystemebene, die Datei wird zum Lesen durch ein Programm - in dem Fall dein Python-Skript - geöffnet und das hat Zugriff auf Inhalt in Form eines Stroms von Bytes.
`open` hat nichts damit zu tun, dass sich die Datei in irgendeinem Editor für dich lesbar öffnet.

Wie viel Python kannst du eigentlich bzw. wie viel hast du in der Uni schon gelernt? Es macht für dich ggf. Sinn, mal das Python-Tutorial auf docs.pyhton.org durchzuarbeiten.

Gruß, noisefloor
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Sülo hat geschrieben: Donnerstag 9. Dezember 2021, 18:18 Ich hab das mal kopiert und versucht leider passiert da nichts außer das er nach dem Namen fragt…
Die Datei homepage.html wird nicht geschrieben und du bekommst auch keine Fehlermeldung in der Konsole ausgegeben? Das kann nicht sein.
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Vielleicht wäre auch die tatsächliche Aufgabenstellung samt Kontext interessant. Am Ende soll das „eine Homepage erstellen“ vielleicht auch was mit Bottle/Flask/Django/… sein.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Editor öffnen ist halt auch super plattformabhängig. Das läuft auf dem iPad anders als unter Windows (oder Linux). Man kann sich da halbwegs mit den systemspezifischen Openern behelfen, z.B. mit der os.startfile Funktion unter Windows sowie xdg-open unter einigen Linux-Systemen bzw das open Kommando für OS X. Vielleicht gibt es inzwischen da schon was Fertiges, das dir die Unterscheidung im Code abnimmt. Aber ist das tatsächlich Teil der Aufgabenstellung oder soll es als Hilfe für dich dienen?
Sülo
User
Beiträge: 29
Registriert: Dienstag 4. Mai 2021, 09:58

/me hat geschrieben: Donnerstag 9. Dezember 2021, 22:30
Sülo hat geschrieben: Donnerstag 9. Dezember 2021, 18:18 Ich hab das mal kopiert und versucht leider passiert da nichts außer das er nach dem Namen fragt…
Die Datei homepage.html wird nicht geschrieben und du bekommst auch keine Fehlermeldung in der Konsole ausgegeben? Das kann nicht sein.
Sorry das ich mich jetzt erst melde das lag alles am blöden iPad.
Auf dem PC hat es dann später funktioniert!
Antworten