Datei aus egg per open/file einlesen

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
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

Hallo Pyhton Community,

ich schämme mich schon fast eine solche Frage zu stellen, aber leider komme ich seit längerer Zeit und einer ausgedehnten Google-Tour nicht weiter.

Ich habe z.b. folgende Egg-Struktur

0 setup.py
1 - __inital__.py
1 - helloplugin.py
1 -htdocs
2 --http
3 --myFile.http


Nun möchte ich in helloplugin.py das file myFile.http aus dem Ordner /htdocs/http einlesen. Leider ist es mir nicht möglich dieses File anzusprechen (File not found exception)

z.b. file = open('/htdocs/http/myFile.http','r')

Gibt es ein besonderes vorgehen um das File aus dem gleichen egg-Paket zu lesen?


Ich würde mich über Antworten freuen.

Danke für eure Unterstützung

Grüße

p.s. Das Egg ist im Einsatzgebiet Trac tätig, falls diese zusätzliche Information relevant ist
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wenn es im gelichen Pfad liegt, dann reicht doch ein relativer Pfad:

Code: Alles auswählen

with open("myFile.http", "r") as infile:
    pass
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Hyperion hat geschrieben:

Code: Alles auswählen

with open("htdocs/http/myFile.http", "r") as infile:
    pass
FTFY. Es ist ja nicht derselbe Pfad.
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

Hallo Hyperion,

danke schonmal für deine Antwort.

Es liegt im gleichen egg, bzw. in einem Unterordner des Egg's.

Zugriff: file=open('/htdocs/http/myFile.http','r')
[Ordnderstruktur wie oben angegeben]

file =open('myFile.http','r')
[myFile.http ist im gleichen egg-Ordner wie as ausführende Py-File]


Aber auch wenn es im gleichen Verzeichnis des Egg's liegt, bekomme ich eine file not found Meldung.

Es ist schon möglich ein File in ein egg einzubinden, und anschließend über relative Addressierung darauf zuzugreifen?

Grüße
Zuletzt geändert von rads am Freitag 26. März 2010, 16:24, insgesamt 1-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

cofi hat geschrieben:
Hyperion hat geschrieben:

Code: Alles auswählen

with open("htdocs/http/myFile.http", "r") as infile:
    pass
FTFY. Es ist ja nicht derselbe Pfad.
Oooops, jo, zu schnell überflogen bzw. die "Stríche" falsch gedeutet ;-)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

rads hat geschrieben: Es ist schon möglich ein File in ein egg einzubinden, und anschließend über relative Addressierung darauf zuzugreifen?
Was meinst Du denn mit "egg"? Ein egg ist doch afaik nichts anderes als ein zip-Ordner, der einen bestimmten Aufbau hat. Du hast "open()" angeführt, welches zum Öffnen von Dateien aus dem Filesystem da ist - insofern dachte ich jetzt, dass Du die Dateien und Ordner auch einfach so vorliegen hast und diese nicht gezippt sind o.ä. Also spielt es doch keine Rolle, ob es ein egg oder sinst was ist...
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

Leider brauche ich die egg-Struktur, da ich wie zu Begin angführt mich leider mit der Plugin-Entwicklung für trac beschäftigen muss.

Ein Test des Pyhton-Codes ist nur mit den Trac-Bibliotheken/source-code möglich.


Ich schreibe folglich ein Programmcode, welches als egg verpackt wird und anschließend in das Tracsystem "installiert" wird.

Ich war der Überzeugung, das wenn das egg wieder ausgepackt wird, die Ordnerstruktur vorhanden bleibt und somit eine relative Adressierung möglich ist.

An sich ist dies zumindest teilweise so,

ich kann so z.B. in einem Template über
<a href="${href.chrome('/hw/html/budgetingfieldset.html')}">text</a>
das File ansprechen
(hw ist ein präfix für hrefs)
jedoch an der gleichen stelle nicht über
<xi:include href="${href.chrome('/hw/html/budgetingfieldset.html')}">
erreichen.

So war grundsätzlich meine Idee, ich könnte über openFile den Inhalt einlesen und anschließend mit Stream-Verarbeitung den gewünschten Inhalt in das html-Dokument einbinden.


Ich hoffe mich diesmal weniger missverständlich ausgedrückt zu haben

Güße und Danke
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Der Weg von `helloplugin.py` ab:

Code: Alles auswählen

import os.path
egg_basedir = os.path.dirname(os.path.abspath(__file__))
httpdir = os.path.join(egg_basedir, "htdocs", "http")
Ob es etwas spezielles fuer eggs gibt, kann ich leider nicht sagen.
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

Danke für die Antwort,

hat mir leider nicht geholfen, ich hatte schon vergelichbare Methoden

Code: Alles auswählen

    def get_templates_dirs(self):
        return [resource_filename(__name__, 'templates')]

    def get_htdocs_dirs(self):
        return [('hw', resource_filename(__name__, 'htdocs'))]  

ich werde es mir morge nochmal anschauen, vielleicht stehe ich heute auf der Leitung.

Grüße
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

Hallo,

wollte nur der Vollständigkeit halber noch das Ergebnis posten.

Wahrscheinlich habe ich mich vergangenen Freitag einfach wie so oft "blöd" angestellt.

Auf das echte File, und nicht das temporäre im Tmp-Folder, komme
ich nun wie folgt

Code: Alles auswählen

 os.path.dirname(__file__)+"/htdocs/html/budgetingfieldset.html"
Hatte zeitweise das Problem, das er mir mit

Code: Alles auswählen

egg_basedir = os.path.dirname(os.path.abspath(__file__))
das Egg nicht "verpackt" hatte und ich es somit nicht in das Tool installieren konnte.
Deweiteren hat er kurzzeitig immer das File im Tmp-Folder angesprungen.

Falls jemand noch eine schönere Lösung kennt, bin ich für Anregungen natürlich offen. Ansonsten schonmal danke für eure Hilfe!

Grüße
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

rads hat geschrieben:Falls jemand noch eine schönere Lösung kennt, bin ich für Anregungen natürlich offen. Ansonsten schonmal danke für eure Hilfe!
Nutze os.path.join anstatt der Stringkonkatenation (und den Slashes).
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Antworten