Anfängerproblem mit Dateifunktionen

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.
sprudel
User
Beiträge: 245
Registriert: Donnerstag 8. März 2007, 17:12

Anfängerproblem mit Dateifunktionen

Beitragvon sprudel » Donnerstag 8. März 2007, 22:02

Hi.
Hab mal wieder ein klassisches Anfängerproblem. Ich wollte mir Funktionen für die Datei Ein- und Ausgabe machen, aber irgendwie will das nicht so wie es soll. Ich finde einfach meinen Fehler nicht.

Code: Alles auswählen


def writefile(inhalt,filename):
    link = file(filename, 'w')
    link.write(inhalt)
    link.close()
    return True

def readfile(filename):
    link = file(filename)
    inhalt = link.read()
    return inhalt


Ich wäre euch wirklich dankbar wenn ihr den Fehler finden würdet. Gruß sprudel
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Beitragvon Sr4l » Donnerstag 8. März 2007, 22:46

Hi,

- ersetze ``file`` mit ``open``
- schreib auch bei deinem readfile "open(filename, 'r')"

Sind beides nur Tipps, keine Fehler im code.

Beim aufrufen von einem Pfad (bei Windows) keine \ (Backspace) nutzen
sondern / (Schrägstrich).

Code: Alles auswählen

def write_file(inhalt,filename):
    link = open(filename, 'w')
    link.write(inhalt)
    link.close()
    return True

def read_file(filename):
    link = open(filename, 'r')
    inhalt = link.read()
    return inhalt

print write_file("lol2lol","data.txt") # schreibt data.txt in ordner wo die py datei liegt
print read_file("data.txt") # funzt auch; daten werden aus data.txt gelsen


Dein Code funktioniert so wie er gepostet wurde
Wenn ich nicht geholfen habe kompletten Code und Fehlermeldung schicken.

mfG Sr4l
BlackJack

Beitragvon BlackJack » Donnerstag 8. März 2007, 23:36

Nach dem lesen sollte man die Datei auch wieder schliessen.

Was ist denn genau das Problem? Fehlermeldung?
PmanX
User
Beiträge: 123
Registriert: Donnerstag 25. Januar 2007, 13:50
Wohnort: Germany.BB.LOS
Kontaktdaten:

Beitragvon PmanX » Donnerstag 8. März 2007, 23:39

Code: Alles auswählen

x = readfile('/etc/passwd')
Dann Close FileObjekt verwenden :!:

Code: Alles auswählen

writefile(x, '/tmp/test')
y = readfile('/tmp/test')
scheint alles da zu sein :D
Test nicht vergessen, ob Lesen, Schreiben erfolgreich war :!:
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Freitag 9. März 2007, 08:34

Sr4l hat geschrieben:- ersetze ``file`` mit ``open``

Warum sollte man das tun??? Ist beides das selbe!

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Freitag 9. März 2007, 08:49

Sr4l hat geschrieben:- ersetze ``file`` mit ``open``

Hi Sr4l!

Was soll das bringen? Ich arbeite nur mit ``file`` da mir der Name sofort sagt, was ich da zurück bekomme. -- Ein File-Object! Im Grunde genommen steht es doch jedem frei, ``file`` oder ``open`` zu verwenden.

@sprudel: Vielleicht hast du auch nur die Parameter beim Aufruf vertauscht.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Beitragvon Sr4l » Freitag 9. März 2007, 09:22

Ihr werdet sehen was ich davon habt :twisted:

Nein mal im ernst ich nehme immer open weil ich es öffne. Ich ziehe es zurück und sage nehmt was ihr wollt ;-)
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Beitragvon Y0Gi » Freitag 9. März 2007, 12:18

`open` kann man insofern als passender sehen, weil zum Einen Funktionen immer nach Verben benannt werden sollten, zum Anderen file eine Klasse ist (die man auch zur Typprüfung heranziehen kann), aber Klassennamen laut PEP 8 mit einem Großbuchstaben beginnen sollten -> kann verwirrend sein.

Ob file() nun den Konstruktor oder __call__ aufruft, weiß ich so nicht, dürfte für den Benutzer aber auch egal sein - und da das meines Wissens in C implementiert ist, gibt es __call__ dort so vielleicht auch gar nicht.

Letztlich ist wichtig, dass man weiß, was gemeint ist und dass man es konsequent einheitlich verwendet. Wirklich *drastische* Argumente pro/contra open/file habe ich mal gesucht, seinerzeit aber nicht gefunden und auch bis heute nicht. Aber ich bin ganz Ohr :)
PmanX
User
Beiträge: 123
Registriert: Donnerstag 25. Januar 2007, 13:50
Wohnort: Germany.BB.LOS
Kontaktdaten:

Beitragvon PmanX » Freitag 9. März 2007, 12:28

Open / Close halte ich für sinnvoll. Wenn ich etwas öffne, sollte ich es auch schließen und es ist in vielen Sprachen gebräuchlich. Für mich explizit :)
BlackJack

Beitragvon BlackJack » Freitag 9. März 2007, 12:36

Der BDFL bevorzugt `open()` zum öffnen von Dateien. Braucht man mehr Gründe? ;-)

Es war mal im Gespräch, dass `open()` so erweitert werden könnte, dass man irgendwo Protokolle registrieren kann, damit sich nicht nur lokale Dateien mit der Funktion öffnen lassen. Da das nicht rückwärtskompatibel ist, dürfte das aber erst in P3K möglich sein. Keine Ahnung was aus der Diskussion geworden ist.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Beitragvon nkoehring » Freitag 9. März 2007, 12:44

BlackJack hat geschrieben:Der BDFL bevorzugt `open()` zum öffnen von Dateien. Braucht man mehr Gründe? ;-)

Es war mal im Gespräch, dass `open()` so erweitert werden könnte, dass man irgendwo Protokolle registrieren kann, damit sich nicht nur lokale Dateien mit der Funktion öffnen lassen. Da das nicht rückwärtskompatibel ist, dürfte das aber erst in P3K möglich sein. Keine Ahnung was aus der Diskussion geworden ist.
Protokolle? Wie meinst du das?
BlackJack

Beitragvon BlackJack » Freitag 9. März 2007, 13:03

Na das sowas wie `open('http://www.heise.de/')` oder `open('zip:spam.zip/some/file/within/archive.txt')` möglich ist. Und das es ähnlich wie bei den `codecs` eine Möglichkeit gibt, eigene Protokolle zu registrieren.
sprudel
User
Beiträge: 245
Registriert: Donnerstag 8. März 2007, 17:12

Beitragvon sprudel » Freitag 9. März 2007, 14:56

Hallo.
Also ich habe es jetzt foglendermaßen verändert, bekomme aber immer noch eine Fehlermeldung

Code: Alles auswählen

def writefile(inhalt,filename):
    link = open(filename, 'w')
    link.write(str(inhalt))
    link.close()
    return True

def readfile(filename):
    link = open(filename)
    inhalt = link.read()
    link.close()
    return inhalt



Traceback (most recent call last):
File "G:\Programmierung und Entwicklung\Python\Zähler\counter.py", line 68, in <module>
filemodule.writefile(count,logfilename_now)
File "G:\Programmierung und Entwicklung\Python\Zähler\filemodule.py", line 11, in writefile
link.write(str(inhalt))
TypeError: argument 1 must be string or read-only character buffer, not int
>>>



Woran könnte das liegen?
BlackJack

Beitragvon BlackJack » Freitag 9. März 2007, 15:14

Du hast nicht zufällig den Namen `str` an eine Funktion gebunden, die eine Zahl zurückgibt?

Mach doch direkt vor der Fehlerstelle mal:

Code: Alles auswählen

    print type(str), repr(str)
    print type(inhalt), repr(inhalt)


Mal so nebenbei: Warum gibt die Funktion `True` zurück?
sprudel
User
Beiträge: 245
Registriert: Donnerstag 8. März 2007, 17:12

Beitragvon sprudel » Freitag 9. März 2007, 15:23

Wegen dem True ausgeben: Hab ich wohl noch von PHP so übernommen, sry :lol:

Aber jetzt kapier ich garnichts mehr

Code: Alles auswählen

def writefile(inhalt,filename):
    link = open(filename, 'w')
    link.write(str(inhalt))
    link.close()
    return True

def readfile(filename):
    link = open(filename)
    inhalt = link.read()
    link.close()
    return inhalt

print type(str), repr(str)
print type(inhalt), repr(inhalt)



Gibt folgende Ausgabe:

<type 'type'> <type 'str'>
Traceback (most recent call last):
File "G:\Programmierung und Entwicklung\Python\Zähler\filemodule.py", line 22, in <module>
print type(inhalt), repr(inhalt)
NameError: name 'inhalt' is not defined
>>>


Was hat das denn zu bedeuten?

Wer ist online?

Mitglieder in diesem Forum: Kebap