Seite 1 von 2

Verfasst: Montag 10. Juli 2006, 09:30
von Rebecca
sys.argv ist einfach eine Liste. Das erste Element (sys.argv[0]) ist der Programmname, die restlichen sind die Parameter, die deinem Programm uebergeben wurden. Folgendes Programm gibt alle seine Parameter aus:

Code: Alles auswählen

import sys;
for arg in sys.argv:
    print arg

Verfasst: Montag 10. Juli 2006, 09:31
von gerold
hubiat hat geschrieben:wie kann ich da in sys.argv nachsehen?!
Hi hubiat!

http://docs.python.org/lib/module-sys.html#l2h-329

Code: Alles auswählen

import sys
print sys.argv
print sys.argv[0]
mfg
Gerold
:-)

Verfasst: Montag 10. Juli 2006, 09:33
von jens

Verfasst: Montag 10. Juli 2006, 12:26
von hubiat
ich glaub ich bin einfach zu blöd dafür! :--(

wie find ich mit diesen unterlagen genau heraus, wie ich ein file zum beispiel in der command line angebe?!?!

ich würde gern folgendes machen:

fileanalyse.py Test.csv >fileanalyse.txt

damit mein ich das python programm aufrufen, das test.csv file analysieren und das ergebnis nach fileanalyse.txt umleiten! :)

ich bin einfach zu blöd glaub ich, wie ich das am besten angehe!
*arrrgh* könnte mir hier jemand eventuell einen tipp geben, wie ich das am besten meistere?! damit mein ichaber uach das suchen danach im forum!

Verfasst: Montag 10. Juli 2006, 12:36
von pr0stAta
Ich gebe zu ich habe mir den Teil davor nun nicht
durchgelesen aber ich würde dir schonmal empfehlen,
den Aufruf ohne ">" zu machen. Also eher so:

fileanalyse.py Test.csv fileanalyse.txt
In der Datei fileanalyse.py kannst du mit sys.argv[1] und sys.argv[2]
auf die 2 Parameter zugreifen, die du übergeben hast.

Code: Alles auswählen

import sys

print sys.argv[1]
print sys.argv[2]
*wie vorher auch schon erklärt*

Ergibt:

Code: Alles auswählen

C:\Dokumente und Einstellungen\lokal\Desktop>fileanalyse.py Test.csv fileanalyse.txt
Test.csv
fileanalyse.txt

Verfasst: Montag 10. Juli 2006, 12:48
von hubiat
pr0stAta hat geschrieben:Ich gebe zu ich habe mir den Teil davor nun nicht
durchgelesen aber ich würde dir schonmal empfehlen,
den Aufruf ohne ">" zu machen. Also eher so:

fileanalyse.py Test.csv fileanalyse.txt
In der Datei fileanalyse.py kannst du mit sys.argv[1] und sys.argv[2]
auf die 2 Parameter zugreifen, die du übergeben hast.

Code: Alles auswählen

import sys

print sys.argv[1]
print sys.argv[2]
*wie vorher auch schon erklärt*

Ergibt:

Code: Alles auswählen

C:\Dokumente und Einstellungen\lokal\Desktop>fileanalyse.py Test.csv fileanalyse.txt
Test.csv
fileanalyse.txt
okay...danke für den tipp!
hmm...und wie sieht da die handhabung dafür aus?!
wie greif ich auf die 2 parameter zu, welche ich übergeben hab?!
bei mir scheitert es glaub ich grundsätzlich an dem, dass ich die hilfe/erklärung zu dem sys.argv nicht verstanden hab! :-/

Verfasst: Montag 10. Juli 2006, 12:52
von Rebecca
Oder wenn du es mit der Ausgabeumlenkung ">" machen willst: Dann nimmt dein Programm nur die Eingabedatei als Argument, und dein Programm gibt die Ausgaben, die du in einer Datei speichern moechtest, direkt auf dem Bildschirm aus.

Beispiel: Speichere folgendes Programm als argument.py:

Code: Alles auswählen

#!/usr/bin/env python

import sys;
print "Erstes Argument:", sys.argv[1];
Nun kann man in der Schell folgendes machen:
rbreu@zam285:python> ./argument.py eine_datai.txt
Erstes Argument: eine_datai.txt
rbreu@zam285:python>
(Ausgabe erscheint auf dem Bildschirm). Oder auch:
rbreu@zam285:python> ./argument.py eine_datai.txt > bla.txt
rbreu@zam285:python>
rbreu@zam285:python> more bla.txt
Erstes Argument: eine_datai.txt
(keine Ausgabe auf dem Bildschirm, die Shell lenkt die Ausgabe in die Datei bla.txt um)

Verfasst: Montag 10. Juli 2006, 12:55
von pr0stAta
wie greif ich auf die 2 parameter zu, welche ich übergeben hab?!
He? :p Das hab ich doch gerade geschrieben.

Also nochmal:
Wie Rebecca schon sagte, sys.argv ist eine Liste. Die enthält als
Listeneinträge jene Werte, die du dem Programm übergibst.
Also wenn du schreibst:

Code: Alles auswählen

fileanalyse.py Test.csv fileanalyse.txt
Sieht sys.argv im pythoncode so aus:

Code: Alles auswählen

sys.argv = ["c:/ordner/fileanalyse.py", "Test.csv", "fileanalyse.txt"]
Nun kannst du dir aussuchen, ob du über die Liste iterierst(wie bei Rebeccas Beispiel ganz oben) oder die ELemente der Liste einzeln ansprichst (so wie ich es gemacht habe)

Hilft das weiter? Wenn nein, sag was genau du nicht versteht :>

Gruss prosta

Verfasst: Montag 10. Juli 2006, 13:21
von hubiat
ich steh heut einfach auf der leitung! :-/
also....
...wie es in meinem konkreten beispiel ist bring ich einfach keine lösung zusammen! keine ahnung warum!

hab das mit dem argument von rebecca versucht, aber leider erhalte ich dann folgende meldung:

./argument.py RTNames.csv
Traceback ( File "<interactive input>", line 1
./argument.py RTNames.csv
^
SyntaxError: invalid syntax

was versteh ich da falsch?!
schön langsam schäm ich mich für mein unlogisches denken heute! :-/

Verfasst: Montag 10. Juli 2006, 13:46
von Rebecca
./argument.py RTNames.csv

Diese Zeile sollst du auch nicht in den Python-Interpreter eintippen, sondern in die Shell (command, Eingabeaufforderung oder wie auch immer es genannt wird, je nach dem ob's Linux oder Windows ist).

Verfasst: Montag 10. Juli 2006, 14:12
von hubiat
Rebecca hat geschrieben:
./argument.py RTNames.csv

Diese Zeile sollst du auch nicht in den Python-Interpreter eintippen, sondern in die Shell (command, Eingabeaufforderung oder wie auch immer es genannt wird, je nach dem ob's Linux oder Windows ist).
okay...das hab ich nun mal verstanden!

jetzt hab ich die fix eingetragene RTNames.csv im Sourcecode, ersetzt durch sys.argv[1], ist das korrekt?!
muss ich da was besonderes beachten?!
weil ich erhalte nun folgende meldung!

D:\Bildung\python\jhtest>bbb.py RTNames.csv
Traceback (most recent call last):
File "D:\Bildung\python\jhtest\bbb.py", line 9, in ?
f = file("sys.argv[1]")
IOError: [Errno 2] No such file or directory: 'sys.argv[1]'

also irgendwas mach ich dank meiner unwissenheit falsch! :)

Verfasst: Montag 10. Juli 2006, 14:14
von pr0stAta
Mach mal aus:
f = file("sys.argv[1]")

Code: Alles auswählen

f = file(sys.argv[1], "r")
Bei dir ist sys.argv[1] ein String. Eigentlich ist es aber ein Listenelement.

Verfasst: Montag 10. Juli 2006, 14:19
von hubiat
pr0stAta hat geschrieben:Mach mal aus:
f = file("sys.argv[1]")

Code: Alles auswählen

f = file(sys.argv[1], "r")
Bei dir ist sys.argv[1] ein String. Eigentlich ist es aber ein Listenelement.
hab ich gemacht!
nun erhalt ich folgende meldung:

raceback (most recent call last):
File "C:\Apps\Python\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py", line 310, in RunScript
exec codeObject in __main__.__dict__
File "D:\Bildung\python\jhtest\bbb.py", line 9, in ?
f = file(sys.argv[1], "r")
IndexError: list index out of range

Verfasst: Montag 10. Juli 2006, 14:24
von pr0stAta
Du solltest dir die Fehlermeldungen schon einmal selber
durchlesen und überlegen was sie bedeuten können, wie willst
du sonst die Sprache wirklich lernen? :) Gerade diese
ist doch wirklich Aussagekräftig.

Das bedeutet, das es keinen Eintrag an der Stelle 1 in der Liste
gibt.
*Vermutung*
Du hast deine Datei nicht mit einem Parameter aufgerufen,
also deiner CSV Datei. Übergib deinem Aufruf deines Scriptes noch
den Namen deiner CSV Datei die hoffentlich im selber Ordner
deines Scriptes liegt.

Verfasst: Montag 10. Juli 2006, 14:50
von hubiat
pr0stAta hat geschrieben:Du solltest dir die Fehlermeldungen schon einmal selber
durchlesen und überlegen was sie bedeuten können, wie willst
du sonst die Sprache wirklich lernen? :) Gerade diese
ist doch wirklich Aussagekräftig.

Das bedeutet, das es keinen Eintrag an der Stelle 1 in der Liste
gibt.
*Vermutung*
Du hast deine Datei nicht mit einem Parameter aufgerufen,
also deiner CSV Datei. Übergib deinem Aufruf deines Scriptes noch
den Namen deiner CSV Datei die hoffentlich im selber Ordner
deines Scriptes liegt.
danke super! ich affe hab das im python gesstartet! *tz*
in der commandline hats funktioniert! :)
DANKE für DEINE Hilfe! Hast mir viiiel weitergeholfen!!!!

wie kann ich eigentlich, wenn ich mit diesem csv modul arbeite, diesem sagen, dass ich bestimmte datensätze, welche gequotet sind, dennoch richtig bearbeite?!
hab derzeit anstelle der namensausgabe eine leerzeile in meinem ausgabe file! :-/

Verfasst: Dienstag 11. Juli 2006, 07:20
von BlackJack
hubiat hat geschrieben:wie kann ich eigentlich, wenn ich mit diesem csv modul arbeite, diesem sagen, dass ich bestimmte datensätze, welche gequotet sind, dennoch richtig bearbeite?!
hab derzeit anstelle der namensausgabe eine leerzeile in meinem ausgabe file! :-/
Das Modul kann eigentlich auch mit gequoteten Einträgen umgehen. Wie sind sie denn gequotet? Kannst Du ein kleines Beispiel für solche Daten posten?

Verfasst: Dienstag 11. Juli 2006, 11:13
von hubiat
hab mir das nun alles nochmal angeschaut und ich bin draufgekommen, dass das mit dem csv modul zwar eine echt lässige lösung ist, aber ich das nun versuchen mag, selbst mit schleifen zu lösen!

wenn ich ein csv file dann einlese, muss ich es dann umwandeln in strings, diese dann einlesen und danach wieder zurücksetzen in den ursprünglichen zustand?! versteh ich das richtig?!
es sind einfach zu viele kriterien, welche ich erfüllen soll, um dieses beispiel/projekt zu lösen!

hätte hierfür vielleicht jemand einen lösungsansatz?!

danke schon im vorhinein!!!

Verfasst: Dienstag 11. Juli 2006, 12:42
von BlackJack
Warum willst Du CSV Dateien selbst parsen, wenn es dafür schon ein Modul gibt, dass Dir die ganze Arbeit abnimmt? Gerade wenn Du sowieso noch eine Menge anderer Anforderungen erfüllen musst.

Verfasst: Dienstag 11. Juli 2006, 14:26
von hubiat
BlackJack hat geschrieben:Warum willst Du CSV Dateien selbst parsen, wenn es dafür schon ein Modul gibt, dass Dir die ganze Arbeit abnimmt? Gerade wenn Du sowieso noch eine Menge anderer Anforderungen erfüllen musst.
damit ich das mit den schleifen usw. besser verstehe! darum dachte ich mir, dass es eventuell besser wär!
wenn ich das einmal verstehe, kann ich das mit dem modul ja immer noch machen, oder?! :)

Verfasst: Dienstag 11. Juli 2006, 18:27
von BlackJack
Grundsätzlich ja, aber das mit dem quoten willst Du nicht selbst machen, glaub mir.

Ansonsten kann man einen einfachen CSV-Leser recht schnell zusammenbasteln. Ein Dateiobjekt ist "iterable", d.h. man kann einfach in einer ``for``-Schleife darüber gehen. Es werden die einzelnen Zeilen als Zeichenketten geliefert. Das Zeilenendezeichen ist dabei noch nicht entfernt. Das kann man mit der `lstrip()` Methode machen. Und mit der `split()`-Methode kann man eine Zeichenkette an bestimmten Zeichen zerlegen. Das war's auch schon.