
Python frage eines newbi
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
open ist wohl innerhalb von Zope nicht erlaubt. Da musst Du mit einem externen Script arbeiten, wie das geht ist hier http://www.dzug.org/ZopeBuch/ZWiki/ZBScriptingZope unter "Externe Scripte benutzen" beschrieben.
Gruß
Dookie
Gruß
Dookie
-
- User
- Beiträge: 19
- Registriert: Donnerstag 23. Oktober 2003, 08:04
- Kontaktdaten:
Hallo!
Da bin ich wieder und hab leider wieder ein Problem!
Das folgende Skript hab ich extern unter Zope eingebunden.
Das Problem ist das irgendwie der Pad auf die Log Datei Test.txt nicht stimmt egal was ich probier
bekomm ich immer die Fehlermeldung "Can't find such file!" hatte die Datei schon direkt im Ordner folder oder auch im Extensions Ordner.
Ich hoffe mir kann jemand weiter helfen.
Da bin ich wieder und hab leider wieder ein Problem!
Das folgende Skript hab ich extern unter Zope eingebunden.
Code: Alles auswählen
def Seite(x):
f =open ("C:/windows/temp/test.txt", 'r')
zaehler = 0
z1 = 0
z2 = 0
for line in f.readlines():
linearray = line.split("|")
if linearray[3] == " view " and linearray[4].strip() == x:
zaehler += 1
if linearray[6].startswith(' 193.175.240') or linearray[6].startswith(' 172.30.30') or linearray[6].startswith(' 192.168'):
z1 += 1
else:
z2 +=1
f.close()
return "Auf die Seite ", x,"wurde",zaehler,"mal zugegriffen. "" Intern: ",z1," Extern:",z2
Das Problem ist das irgendwie der Pad auf die Log Datei Test.txt nicht stimmt egal was ich probier
bekomm ich immer die Fehlermeldung "Can't find such file!" hatte die Datei schon direkt im Ordner folder oder auch im Extensions Ordner.
Ich hoffe mir kann jemand weiter helfen.
nein -- Python ist das egal, es funktionieren beide Varianten.Dookie hat geschrieben:Musst Du unter Windows nicht den Backslash nehmen statt dem Slash im Pfad?
Sieht das dann nicht eher so aus, wenn schon Backslash?gast hat geschrieben:hi,
funzt das sogrußCode: Alles auswählen
f =open (r'C:/windows/temp/test.txt', 'r')

Code: Alles auswählen
f =open (r'C:\windows\temp\test.txt', 'r')
Hallo!
Jan
Aber kommt denn die Fehlermeldung überhaupt von Python? Die lautet doch in der Regel IOError: [Errno 2] No such file or directory: 'foo'. Hab' aber von Zope keine Ahnung.Milan hat geschrieben:nein -- Python ist das egal, es funktionieren beide Varianten.
Jan
-
- User
- Beiträge: 19
- Registriert: Donnerstag 23. Oktober 2003, 08:04
- Kontaktdaten:
Hi Voges.
Ja der Fehler kommt von Python genau der den dun genannt hast.
Zope bindet das Skript problemlos ein und arbeitet dann auch damit.
Nur beim Dateien öffnen findet er jetzt die test.txt nicht egal wo sie auf dem Zope Server abgelegt ist.
Ja der Fehler kommt von Python genau der den dun genannt hast.
Zope bindet das Skript problemlos ein und arbeitet dann auch damit.
Nur beim Dateien öffnen findet er jetzt die test.txt nicht egal wo sie auf dem Zope Server abgelegt ist.
Hallo!
2 Vorschläge:
- Mach unmittelbar vor'm open() mal ein os.listdir("C:/windows/temp/"), um zu sehen, ob in der Liste die "test.txt" auch auftaucht.
- erzeuge über das Script mal eine Datei mit dem selben Pfad. Dann kannst Du ja über die Windows-Suchfunktion gucken, wo sie abgeblieben ist (falls Dateien überhaupt angelegt werden dürfen).
Jan
Bitte immer genau angeben. Wenn Du schreibst 'bekomm ich immer die Fehlermeldung "Can't find such file!"', dann geht man davon aus, das die Meldung auch exakt so lautet.Calanetics hat geschrieben:Ja der Fehler kommt von Python genau der den dun genannt hast.
2 Vorschläge:
- Mach unmittelbar vor'm open() mal ein os.listdir("C:/windows/temp/"), um zu sehen, ob in der Liste die "test.txt" auch auftaucht.
- erzeuge über das Script mal eine Datei mit dem selben Pfad. Dann kannst Du ja über die Windows-Suchfunktion gucken, wo sie abgeblieben ist (falls Dateien überhaupt angelegt werden dürfen).
Jan
-
- User
- Beiträge: 728
- Registriert: Sonntag 22. September 2002, 08:32
- Wohnort: Sauerland
- Kontaktdaten:
Ich kenne zwar Zope nicht, aber kann es sein, dass Zope ähnlich Apache ein RootDirectory definiert? dieses Directory wäre dann in der Folge als / anzugeben.
Bei externen Scripts außerhalb von Zope, müßte dann der Pfad wieder ergänzt werden. Nur mal so als Idee.......
Hans
Bei externen Scripts außerhalb von Zope, müßte dann der Pfad wieder ergänzt werden. Nur mal so als Idee.......
Hans
-
- User
- Beiträge: 19
- Registriert: Donnerstag 23. Oktober 2003, 08:04
- Kontaktdaten:
Hi Leute.
Danke nochmal für die Hilfe hab jetzt das Problem hinbekommen und da hat besonders Voges sein Tipp geholfen.
Mein Programm läuft jetzt auch super nur optisch ist es noch ncht ganz so schön und zwa bei folgendem Text:
und zwar erscheint dann immer flogende ausgabe:
('Auf die Seite ', Seite,'wurde',zaehler,'mal zugegriffen. '' Intern: ',z1,' Extern:',z2')
Ich hab schon ne Menge versucht damit diese Klammern und hochkommas verschwinden. in der python shell klappt es aber dort kann man auch return weglassen und brauch nur print schreiben.
Ich hoffe es kann mir jemand weiterhelfen.
Machsts jutii
Danke nochmal für die Hilfe hab jetzt das Problem hinbekommen und da hat besonders Voges sein Tipp geholfen.
Mein Programm läuft jetzt auch super nur optisch ist es noch ncht ganz so schön und zwa bei folgendem Text:
Code: Alles auswählen
def Seite(x):
f =open ("C:/windows/temp/test.txt", 'r')
zaehler = 0
z1 = 0
z2 = 0
for line in f.readlines():
linearray = line.split("|")
if linearray[3] == " view " and linearray[4].strip() == x:
zaehler += 1
if linearray[6].startswith(' 193.175.240') or linearray[6].startswith(' 172.30.30') or linearray[6].startswith(' 192.168'):
z1 += 1
else:
z2 +=1
f.close()
return "Auf die Seite ", x,"wurde",zaehler,"mal zugegriffen. "" Intern: ",z1," Extern:",z2
('Auf die Seite ', Seite,'wurde',zaehler,'mal zugegriffen. '' Intern: ',z1,' Extern:',z2')
Ich hab schon ne Menge versucht damit diese Klammern und hochkommas verschwinden. in der python shell klappt es aber dort kann man auch return weglassen und brauch nur print schreiben.
Ich hoffe es kann mir jemand weiterhelfen.
Machsts jutii
Hallo!
Mal ganz allgemein: Rumprobieren ist ein schlechter Lehrer, wenn es um's Programmieren geht. Die Grundlagen von Python solltest Du schon kennen oder zumindest fehlendes Wissen anhand der Doku Dir problemlos aneignen können.
Jan
Wäre schon interessant, wodran es nun gelegen hat.Calanetics hat geschrieben:Danke nochmal für die Hilfe hab jetzt das Problem hinbekommen und da hat besonders Voges sein Tipp geholfen.
An den "Klammern und Hochkommas" solltest Du eigentlich sofort erkennen, dass Du es nicht mit einem String, sondern mit einem Tupel zu tun hast. return macht etwas deutlich anderes als print (siehe Doku).Calanetics hat geschrieben: ('Auf die Seite ', Seite,'wurde',zaehler,'mal zugegriffen. '' Intern: ',z1,' Extern:',z2')
Ich hab schon ne Menge versucht damit diese Klammern und hochkommas verschwinden. in der python shell klappt es aber dort kann man auch return weglassen und brauch nur print schreiben.
Mal ganz allgemein: Rumprobieren ist ein schlechter Lehrer, wenn es um's Programmieren geht. Die Grundlagen von Python solltest Du schon kennen oder zumindest fehlendes Wissen anhand der Doku Dir problemlos aneignen können.
Jan
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi,
so gibst Du ja auch mit dem return ein Tuple zurück, versuchs mal so:
oder so
Gruß
Dookie
so gibst Du ja auch mit dem return ein Tuple zurück, versuchs mal so:
Code: Alles auswählen
return "Auf die Seite "+str(x)+" wurde "+str(zaehler)+" mal zugegriffen. Intern: "+str(,z1)+" Extern:"+str(z2)
Code: Alles auswählen
return "Auf die Seite %s wurde %i mal zugegriffen.\nIntern: %i Extern: %i" % (x, zaehler, z1, z2)
Gruß
Dookie
-
- User
- Beiträge: 19
- Registriert: Donnerstag 23. Oktober 2003, 08:04
- Kontaktdaten:
Moin, Moin!
Danke hat alles supi geklappt!
Voges zu dem Problem mit der Pfadangabe unter Zope hab ich einfach deinen Trick benutzt und hab geschaut wo eine neue Datei angelegt wird.
Und zwar wird sie in dem Ordner Var unter Zope angelegt wo ich jetzt auch die logs hingeschoben hab.
Nur mal als kleine Zwischenfrage: Um mein Programm noch runder zu machen würd ich gern die orginal logs in den Ordner var kopieren.
Geht das so einfach mit import.
Irgednwie ist zu diesem Thema nicht viel zu finden. Vielleicht ist es ja auch selbsterklärend und ich bin wieder nicht so clever:)
Aber mein eigentliches Prob ist bei folgendem Quelltext.
Und zwar geb ich ja eine Liste zurück die ich schon nen bißche bearbeite bei der Ausgabe.
Doche leider macht er keine Zeilenumbrüche nach jeder Zeile obwohl ich doch \n angeb!
Ich hoffe es kann mir jemand weiterhelfen.
Danke hat alles supi geklappt!
Voges zu dem Problem mit der Pfadangabe unter Zope hab ich einfach deinen Trick benutzt und hab geschaut wo eine neue Datei angelegt wird.
Und zwar wird sie in dem Ordner Var unter Zope angelegt wo ich jetzt auch die logs hingeschoben hab.
Nur mal als kleine Zwischenfrage: Um mein Programm noch runder zu machen würd ich gern die orginal logs in den Ordner var kopieren.
Geht das so einfach mit import.
Irgednwie ist zu diesem Thema nicht viel zu finden. Vielleicht ist es ja auch selbsterklärend und ich bin wieder nicht so clever:)
Aber mein eigentliches Prob ist bei folgendem Quelltext.
Code: Alles auswählen
import string
def Monat(x):
d1 = {'September' : 'C:/windows/temp/test.txt',
'Oktober' : 'C:/windows/temp/test1.txt'}
f =open (d1[x], 'r')
d ={}
d2 = []
for line in f.readlines():
linearray = line.split("|")
if linearray[3] == " view " :
d[linearray[4]] = 0
for s in d.keys():
zaehler = 0
z1 = 0
z2 = 0
f.seek(0)
for line in f.readlines():
linearray = line.split("|")
if linearray[3] == " view " and linearray[4] == s:
zaehler += 1
if linearray[6].startswith(' 193.175.240') or linearray[6].startswith(' 172.30.30') or linearray[6].startswith(' 192.168'):
z1 += 1
else:
z2 +=1
d2.append('Auf die Seite %s wurde %i mal zugegriffen werden. Intern: %i Extern: %i' % (s, zaehler, z1, z2))
return string.join(d2, '\n')
Doche leider macht er keine Zeilenumbrüche nach jeder Zeile obwohl ich doch \n angeb!
Ich hoffe es kann mir jemand weiterhelfen.
Hallo!
Jan
Wo erfolgt die Ausgabe? Wenn in einem Webbrowser eingebettet in HTML-Code, dann erzeugst Du Zeilenumbrüche nicht mit \n, sondern mit <br>.Calanetics hat geschrieben:Und zwar geb ich ja eine Liste zurück die ich schon nen bißche bearbeite bei der Ausgabe.
Doche leider macht er keine Zeilenumbrüche nach jeder Zeile obwohl ich doch \n angeb!
Jan
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Achja, und vergiss das import String, ausser du Arbeitest mit Python 1.5, ab 2.x sind praktisch alle Funktionen aus string als Methoden in den Strings enthalten.
Wegen der Ausgabe im Webbrowser:
Gruß
Dookie
Wegen der Ausgabe im Webbrowser:
Code: Alles auswählen
"<br/>\n".join(d2)
Gruß
Dookie
-
- User
- Beiträge: 19
- Registriert: Donnerstag 23. Oktober 2003, 08:04
- Kontaktdaten:
Hallo Ihr kennt ja alle mein Skript
Monat Siehe 2 weiter oben.
Ich hab jetzt wieder ein Prob und zwar kommt bei mir die Fehlermeldung
List out of Range.
Ich Frage mich jetzt woran das liegt. Es wird ja eine Log Datei ausgewertet. Bei 30 Zeilen klappt das auch noch gut ohne Fehler.
Meine Frage ist es ob es nicht egal ist wieviel Zeilen er auswertet oder ob es eine maximale Anzahl von Zeilen sein darf wie 300 z.b.???
Monat Siehe 2 weiter oben.
Ich hab jetzt wieder ein Prob und zwar kommt bei mir die Fehlermeldung
List out of Range.
Ich Frage mich jetzt woran das liegt. Es wird ja eine Log Datei ausgewertet. Bei 30 Zeilen klappt das auch noch gut ohne Fehler.
Meine Frage ist es ob es nicht egal ist wieviel Zeilen er auswertet oder ob es eine maximale Anzahl von Zeilen sein darf wie 300 z.b.???
Hallo!
Und wenn Du unmittelbar vor der fehlererzeugenden Zeile ein print dieListe machst, wirst Du auch u.U. selbst den Fehler finden.
Jan
Bitte immer präzise angeben, welche Zeile den Fehler verursacht. Du greifst ja an einigen Stellen auf einzelne Listenelemente zu und eben einmal 'hinter' die Liste.Calanetics hat geschrieben:List out of Range.
Und wenn Du unmittelbar vor der fehlererzeugenden Zeile ein print dieListe machst, wirst Du auch u.U. selbst den Fehler finden.
Jan