Programm zum Umschreiben einer Datei

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
CrazyVlad1992
User
Beiträge: 5
Registriert: Donnerstag 9. Juni 2011, 09:24

Hi,
bin neu hier und in der Python Welt :) Habe leider davor keine Programmiersprache gelernt und der Einstieg fällt einem erstmal schwer :/
Habe (mithilfe des Internets und viel lesen) ein Programm geschrieben das eine Textdatei öffnet und nebenbei in einer anderen Textdatei etwas verändert.
Hier:

Code: Alles auswählen

#! /usr/local/bin/python

#Programm for File I/O

import os
import sys
import csv

filename = raw_input("Enter filename: ")
if len(filename) == 0:
        print "IOError"

if len(filename) > 0:
        print ("File is ready")
        openfile = open(filename)
        line = openfile.read()
        print ("Succsesfull found File")
        print (line)

f = open('/home/???/nano.save', 'a')
f.write("Hallo Welt") #print text (Hallo Welt) in file(nano.save)

f.close()



openfile.close() 
Meine Frage: Wie sollte ich das verändern damit die Funktion stimmt :/ Falls es geht könntet ihr mir irgendwie einen Denkanstoß geben damit ich dabei auch was lerne :)?
Zuletzt geändert von CrazyVlad1992 am Donnerstag 9. Juni 2011, 10:13, insgesamt 2-mal geändert.
Liffi
User
Beiträge: 153
Registriert: Montag 1. Januar 2007, 17:23

Zunaechst: Koenntest du deinen Code in python-Tags stellen?
Dann kann man ihn sich auch richtig anschauen.
CrazyVlad1992
User
Beiträge: 5
Registriert: Donnerstag 9. Juni 2011, 09:24

So jetzt hab ichs glaube ich :D
Zuletzt geändert von CrazyVlad1992 am Donnerstag 9. Juni 2011, 10:12, insgesamt 1-mal geändert.
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

@CrazyVlad1992:
Könntest du dich präziser ausdrücken, was du erreichen willst und wo das Problem ist?
Markiere mal das Problem im Quellcode.

Edit: Es existiert ein schnuckliges Python-Tag zur Formatierung von Quellcode.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
CrazyVlad1992
User
Beiträge: 5
Registriert: Donnerstag 9. Juni 2011, 09:24

darktrym hat geschrieben:@CrazyVlad1992:
Könntest du dich präziser ausdrücken, was du erreichen willst und wo das Problem ist?
Markiere mal das Problem im Quellcode.

Edit: Es existiert ein schnuckliges Python-Tag zur Formatierung von Quellcode.
@darktrym : Sry hab ich nicht gesehen :D
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hallo,
CrazyVlad1992 hat geschrieben: Meine Frage: Wie sollte ich das verändern damit die Funktion stimmt :/ Falls es geht könntet ihr mir irgendwie einen Denkanstoß geben damit ich dabei auch was lerne :)?
Du musst besser beschreiben, was an dem gezeigten Code nicht funktioniert! Entweder bei einem Fehler diesen exakt so posten, wie er in der Konsole ausgegeben wird (copy & paste), oder ansonsten das Verhalten beschreiben und erklären, welches Du eigentlich erwartet hättest. Nur so können Dir andere helfen, ohne erst zig Gegenfragen stellen zu müssen.

Code gehört auch immer in die Python-Code-Tags; Daten oder anderer Code in "normale" Code-Tags. Da Einrückungen ein syntaktisches Element der Sprache sind, verfälscht das Weglassen der Einrückungen schließlich den Code - und genau das verhindern die Code-Tags :-)

Vielleicht schon mal ein paar Anmerkungen:

Code: Alles auswählen

filename = raw_input("Enter filename: ")
if len(filename) == 0:
    print "IOError"
Die Meldung IOError suggeriert, dass eine Exception aufgetreten ist. Da sie das aber ja nicht ist, verwirrt das einen Anwender eher, als dass es nützt. Wieso nicht explizit hinschreiben, dass der Dateiname leer ist? Zudem willst Du dann ja wohl entweder noch einen Namen eingeben lassen oder aber das Programm beenden, oder? Letzteres ginge an der Stell z.B. über

Code: Alles auswählen

    sys.exit(0)
Danach geht es so ähnlich weiter. Nur weil man einen Namen hat, muss die Datei ja nicht existieren oder sich öffnen lassen. Insofern überlasse die Exceptions doch einfach dem Interpreter und fange si ggf. ab. Da das natürlich kein Stoff für einen blutigen Anfänger ist, lasse es halt erst einmal.

Dateien öffnet man mit diesem Idiom:

Code: Alles auswählen

with open(filename, "r") as infile:
    # infile ist in diesem Block das geöffnete file Objekt
    data = infile.read()
Vorteil: Die Datei wird auf jeden Fall geschlossen, egal, ob eine Exception auftritt oder nicht.

`file.read` liest alles ein - nicht nur eine Zeile. Willst Du die Datei zeilenweise, musst Du über das file-object iterieren:

Code: Alles auswählen

# infile ist file object
for line in infile:
    print line
Solltest Du Python 2.x benutzen, dann verunstalte `print` doch nicht als Funktion und lass die Klammern weg! Zudem gehören die Klammern immer direkt an den Namen:

Code: Alles auswählen

# richtig
foo()
# falsch
foo ()
Du importierst zig Module, die Du gar nicht verwendest. Wozu das?

Generell kenne ich jetzt Deine Motivation nicht, aber Du solltest wohl erst einmal ein gutes Tutorial durcharbeiten, bevor Du Dir Dinge zusammenschusterst, die Du nicht verstehst.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
CrazyVlad1992
User
Beiträge: 5
Registriert: Donnerstag 9. Juni 2011, 09:24

Vielen Dank für diese ausführliche Antwort Hyperion :D
Bin gerade Praktikant bei einer Firma mit der Chance für eine Ausbildung :D Möchte viel über Python lernen um eine Grundlage zu haben :)
Habe zwar verstanden was du mit den Codes meinst aber leider weiß ich persönlich noch nicht wie ich ein Programm ohne Anleitung und Hilfe schreibe-.-
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

CrazyVlad1992 hat geschrieben:Vielen Dank für diese ausführliche Antwort Hyperion :D
Bin gerade Praktikant bei einer Firma mit der Chance für eine Ausbildung :D Möchte viel über Python lernen um eine Grundlage zu haben :)
Habe zwar verstanden was du mit den Codes meinst aber leider weiß ich persönlich noch nicht wie ich ein Programm ohne Anleitung und Hilfe schreibe-.-
Dann solltest Du Dir ein Tutorial schnappen und das durcharbeiten! Threads dazu gibt hier zur genüge im Forum ;-) Zudem kannst Du mal im wiki gucken: wiki.python-forum.de. Dort gibt es eine spezielle Seite für Anfänger.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
CrazyVlad1992
User
Beiträge: 5
Registriert: Donnerstag 9. Juni 2011, 09:24

Vielen Dank :D Werde ich jetzt sofort mal machen ^^ :mrgreen:
Antworten