Seite 1 von 1

File Object Proleme

Verfasst: Dienstag 28. September 2004, 08:37
von Stolzi
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

Re: File Object Proleme

Verfasst: Dienstag 28. September 2004, 09:00
von 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

Verfasst: Dienstag 28. September 2004, 10:12
von Stolzi
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

Verfasst: Dienstag 28. September 2004, 10:26
von mawe
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

Verfasst: Dienstag 28. September 2004, 10:46
von Stolzi
Das sind mir immer die liebsten Fehler.
Danke dir!