Seite 1 von 1

Offene Datei in Klasse

Verfasst: Mittwoch 24. November 2010, 22:02
von ravenheart
Ist es "schlimm" , oder wo liegen die Gefahren, wenn man so etwas tut:

Code: Alles auswählen

class A:
    def __init__(self):
        self.file = open("test.txt")
        ...
    def readme(self):
        self.file.seek(0)
        for line in self.file:
            print line

Re: Offene Datei in Klasse

Verfasst: Mittwoch 24. November 2010, 22:18
von cofi
Du meinst in Python2 nicht von `object` zu erben? Hmm ja. :twisted:

Zur offenen Datei: Es kann durchaus Nebenwirkungen einen Handle zu einer Datei unnoetig offen zu halten, unter Windows blockiert das AFAIR das Loeschen der Datei. Koennte auch noch mehr und schlimmere geben.
Solang es keinen wirklich, wirklich guten Grund hat wuerde ich davon Abstand nehmen und die Datei in `readme' oeffnen oder den Inhalt der Datei als Klassenattribut cachen.

Re: Offene Datei in Klasse

Verfasst: Mittwoch 24. November 2010, 22:26
von derdon
Oder die __init__ von Klasse A bekommt den Dateiinhalt als Parameter übergeben.

Re: Offene Datei in Klasse

Verfasst: Mittwoch 24. November 2010, 22:30
von nomnom
cofi hat geschrieben:Du meinst in Python2 nicht von `object` zu erben? Hmm ja. :twisted:
Was birgt die Vererbung von `object` für Vorteile?

Re: Offene Datei in Klasse

Verfasst: Mittwoch 24. November 2010, 22:32
von DasIch
nomnom hat geschrieben:
cofi hat geschrieben:Du meinst in Python2 nicht von `object` zu erben? Hmm ja. :twisted:
Was birgt die Vererbung von `object` für Vorteile?
Wenn man von object erbt hat man eine New-Style Klasse.

Re: Offene Datei in Klasse

Verfasst: Mittwoch 24. November 2010, 22:35
von /me
nomnom hat geschrieben:Was birgt die Vererbung von `object` für Vorteile?
New-style and classic classes

Re: Offene Datei in Klasse

Verfasst: Mittwoch 24. November 2010, 22:48
von ravenheart
Bitte noch etwas auf das ursprünglche Thema eingehen ^^

Ich suche immer noch driftige gründe den fd nicht offen zu halten, solange ich nur lesend darauf zugreife

Re: Offene Datei in Klasse

Verfasst: Mittwoch 24. November 2010, 22:56
von DasIch
Die Zahl der fds pro Prozess ist begrenzt und mit jedem offenen fd steigt natuerlich auch der benoetigte Speicher.

Re: Offene Datei in Klasse

Verfasst: Donnerstag 25. November 2010, 01:11
von ravenheart
eine tempfile ist ja auch eine offener fd, oder?

Gibt es vielleicht eine Möglichkeit folgendes zu tun:

Code: Alles auswählen

# im grunde steht hier der algorithmus
# das Problem, da ich ab und an tempfiles einbauen will, benötige ich hier eine offene Datei 
def mach_irgendwas(file):
    for line in file:
        wichtiger vorgang

# Nun hab ich auch andere Dateien, welche "Normal" sind
def mach_irgendwas2(path):
    file = open()
    # genau das selbe wie oben
    for line in file:
        wichtiger vorgang
    file.close()
Kann man das so vereinfachen, dass ich nicht 2 Fubnktionen brauche?
Mir fiele nur ein vor dem eigentlichen Schleifen durchlauf zu prüfen ob ich mit einem String oder Filedeskriptor zu tun habe und dann das open bei Bedarf einzufügen.
Ist aber auch hässlich.

Andererseits könnte ich einfach alle Dateien offen halten, dann brauch ich kein open mehr .

Oder ich schreibe 2 Klassen, wobei die eine nur Temporäre Dateien akzeptiert und die andere nicht.

Alle meine Posts hängen irgendwie zusammen.

Immer noch die Tabellen verarbeiten.

Code: Alles auswählen

class handler:  #oldschool ^^ no object 
   def __init__(self):
       self.file = None
    def slect_colums:
       ...
       return new_handler
Im Grunde ist das so eine Art minimales Gerüst, das ich ausbauen möchte. Ein Handler bekommt eine Datei, für welche er zuständig ist, jede Bearbeitung führt zu einer neuen gültigen Tabelle und deren Handler soll zurückgegeben werden.

damit solche hübschen Dinge möglich sind:

Code: Alles auswählen

handler1.select_was().machirgendwasanderes().und_noch_mehr()
Dabei interessieren mich die Zwischenschritte
select_was()
nicht explizit, es sei denn ein Benutzer möchte diese Schritte speichern, so dass diese in Temporäre Dateien geschrieben werden sollten.
Wie genau ich das aber mache ist mir noch unklar.

Re: Offene Datei in Klasse

Verfasst: Donnerstag 25. November 2010, 08:31
von EyDu

Code: Alles auswählen

def mach_irgendwas(file):
    for line in file:
        wichtiger vorgang

def mach_irgendwas2(path):
    withe open(...) as file:
        mach_irgendwas(file)
Die Unterscheidung von "normalen" und temporären Dateien würde ich durch Vererbung modellieren.