File Object Proleme

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
Stolzi
User
Beiträge: 155
Registriert: Mittwoch 18. August 2004, 15:44

Hallo, warum bringt mir folgende Modifikation vom dic_to_file():

Code: Alles auswählen

def to_file(d, name=conffile, sep='='):
    items = d.items()
    items.sort()
    f = file(name, 'w')
    f.write("# dictionary written by %s\n\n" % sys.argv[0])
    for key, value in items:
        f.write('%s\t%s "%s"\n' % (key, sep, str(value)))
    f.close()
    fi = file(name, 'w')
    i=fi.read()
    fi.close()
    print i
immer den Fehler:
i=fi.read()
IOError: [Errno 9] Bad file descriptor
Irgendwie kann ich die Datei erst lesen wenn das Programm das sie erzeugt hat wieder geschlossen ist. Hätte mir gedacht dass es nach dem close() doch gehen sollte??
Kann sie auch mit einem externen Texteditor nicht öffnen bevor das erzeugende Proggi nicht geschlossen ist.
Danke für Aufklärung ;-)
Stolzi
joe

Hi!
Stolzi hat geschrieben:

Code: Alles auswählen

    fi = file(name, 'w')
    i=fi.read()
 
Du öffneest die datei zum schreiben und willst dann aber aus ihr lesen. das geht nicht.
joe
Stolzi
User
Beiträge: 155
Registriert: Mittwoch 18. August 2004, 15:44

Ok auch wiedermal anders als bei PHP ;-)
Dann ists daran auch nicht gelegen.
Warum bringt dann aber folgender Code:

Code: Alles auswählen

import sys,re
conffile="E:\Eigene Dateien\config.txt"

def to_file(d, name=conffile, sep='='):
    items = d.items()
    items.sort()
    f = file(name, 'w')
    f.write("# dictionary written by %s\n\n" % sys.argv[0])
    for key, value in items:
        f.write('%s\t%s "%s"\n' % (key, sep, str(value)))
    f.close()
    fi = file(name, 'r')
    i=fi.read()
    fi.close()
    print i

def to_dict(name=conffile, sep="="):
    f = file(name,'r')
    c = f.read()
    f.close()
    regex = '((\w+)\s*%s[ \t\f\v]*(("[^"]*")|(\S*))[^\n]*\n)' % sep
    result = dict([(x[1],x[2].strip('"').strip()) for x in re.findall(regex,c)])
    return result


try:
    conf=to_dict()
    print "lese"
    print conf
except:
       dict={"init":True}
       to_file(dict)
       conf=to_dict()
       print "erzeuge"
       print conf
Diesen Fehler?

result = dict([(x[1],x[2].strip('"').strip()) for x in re.findall(regex,c)])
TypeError: 'dict' object is not callable
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

Verwende keine Schlüsselwörter als Variablennamen!
Versuch mal mydict statt dict, dann funktioniert's (bei mir):

Code: Alles auswählen

mydict = {"init":True}
to_file(mydict)
Gruß, mawe
Stolzi
User
Beiträge: 155
Registriert: Mittwoch 18. August 2004, 15:44

Das sind mir immer die liebsten Fehler.
Danke dir!
Antworten