Mein erstes kleines Übungsprogramm - Verbesserungsvorschläge

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
orschiro
User
Beiträge: 60
Registriert: Donnerstag 11. Dezember 2008, 16:10
Kontaktdaten:

Hallo Leute,

zur reinen Übung habe ich ein kleines Programm in Python geschrieben, in mehreren Etappen muss ich sagen. Die Funktionsweise ergibt sich aus den Kommentaren. Könntet ihr als versierte Programmierer vielleicht mal drüber schauen, und mir sagen, was ich verbessern könte, sei es von Struktur, Aufbau, Logik, Ablauf? Nennt einfach mal alles, was euch auffällt oder was ihr anders lösen würdet. :)

Vielen Dank für eure Erfahrungen.

Code: Alles auswählen

#!/usr/bin/python
# -*- encoding: utf-8 -*-

import subprocess
import os
import string
import time

class Template:

   def __init__(self, template):
      f_in = open(template, "r")
      self.htmlText = f_in.read()
      f_in.close

   def substitute(self, **params):
      for arg in params:
         replaceString = "<% " + arg + " %>"
         self.htmlText = string.replace(self.htmlText,
                  replaceString, params[arg])

   def write(self, fileName):
      f_out = open(fileName, "w")
      f_out.write(self.htmlText)
      f_out.close()

# definiere den Titel des Artikels

titel = raw_input('Gib bitte einen Titel ein:\n')

# ermittle das Veröffentlichungsdatum

datum = time.strftime(("%A, %B %d, %Y %H:%M"),time.localtime())

# starte vim und lasse den Benutzer den Artikel in tmp.html erstellen 

subprocess.call(["vim" , "tmp.html"])

inhalt = open('tmp.html', 'r')

artikel = content.read()

# startet die restliche Anwendung

if __name__ == "__main__":

	
	# lese das Template ein
	
	test = Template("templates/artikel.tpl")

	# ersetze die Platzhalter mit dem Inhalt von oben

	test.substitute(titel = titel, datum = datum, inhalt = inhalt)

	# schreibe die temporäre artikel.tmp

	test.write("artikel.tmp") 

	# lese den neuen artikel ein

	a = open('artikel.tmp', 'r')
	b = a.read()

	# lese alle bisherigen artikel aus der text datei

	z = open('artikel.txt', 'r')
	y = z.read()

	# schreibe den neuen artikel in die text-datenbank

	x = open('artikel.txt', 'w')
	x.write(b)
	x.close()

	# füge die alten artikel wieder an das ende der text datei

	w = open('artikel.txt', 'a')
	w.write(y)
	w.close()

	# lese die aktualisierte text datei ein

	c = open('artikel.txt', 'r')
	d = c.read()
	
	# lese das index template ein

	e = Template('templates/index.tpl')

	# ersetze den Platzhalter 'inhalt' mit dem inhalt der aktualisierten 
        # textdatei

	e.substitute(inhalt = d)

	# gebe die aktualisierte index.html aus

	e.write('index.html') 

	# entferne die temporären dateien

	os.remove('artikel.tmp')
	os.remove('tmp.html')

	# lade die aktualisierte index.html auf den server

	i = subprocess.Popen(['scp','index.html','hostname.tld:/verzeichnis/index.html'])
	i.wait()
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Struktur? Nicht vorhanden. Nutze doch Funktionen. Dass du das eigentlich auch willst, sagen die ueberfluessigen Kommentare, die beschreiben was der Code tut. Dazu kommt, dass dein Skript fuer andere Anwendungen quasi unbenutzbar ist, da es nur direkt gestartet etwas tut und ansonsten auch schlecht gekapselt ist (s.o.)

In Verbindung mit Dateien sollte man ``with`` (ab 2.6, ab 2.5 per ``__future__`` importierbar) benutzen, oder wenigstens ein ``try ... finally`` Konstrukt.

Lass deine Klasse von ``object`` erben. (Ignorier das, wenn du Python 3.x nutzt)

Bleibe in einer Sprache, dann veraendert sich auch ein ``inhalt`` nicht ploetzlich zu ``content``.

Benutze sprechende Namen, statt ``a``, ``w``, ``x``, usw.

Lies [wiki]PEP 8 (Übersetzung)[/wiki] oder das Original.

P.S. Das gehoert in Codesnippets. In Zukunft bitte in die richtigen Foren posten ;)
Antworten