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
Datei aus egg per open/file einlesen
- 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
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
FTFY. Es ist ja nicht derselbe Pfad.Hyperion hat geschrieben:Code: Alles auswählen
with open("htdocs/http/myFile.http", "r") as infile: pass
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
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
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.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Oooops, jo, zu schnell überflogen bzw. die "Stríche" falsch gedeutetcofi hat geschrieben:FTFY. Es ist ja nicht derselbe Pfad.Hyperion hat geschrieben:Code: Alles auswählen
with open("htdocs/http/myFile.http", "r") as infile: pass
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
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 hat geschrieben: Es ist schon möglich ein File in ein egg einzubinden, und anschließend über relative Addressierung darauf zuzugreifen?
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
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
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Der Weg von `helloplugin.py` ab:
Ob es etwas spezielles fuer eggs gibt, kann ich leider nicht sagen.
Code: Alles auswählen
import os.path
egg_basedir = os.path.dirname(os.path.abspath(__file__))
httpdir = os.path.join(egg_basedir, "htdocs", "http")
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Danke für die Antwort,
hat mir leider nicht geholfen, ich hatte schon vergelichbare Methoden
ich werde es mir morge nochmal anschauen, vielleicht stehe ich heute auf der Leitung.
Grüße
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'))]
Grüße
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
Hatte zeitweise das Problem, das er mir mit
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
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"
Code: Alles auswählen
egg_basedir = os.path.dirname(os.path.abspath(__file__))
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
Nutze os.path.join anstatt der Stringkonkatenation (und den Slashes).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!
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher
http://ms4py.org/
Gerhard Kocher
http://ms4py.org/