(gelöst)Noch ein Problem mit Optparse

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
Benutzeravatar
Schaf220
User
Beiträge: 113
Registriert: Montag 11. August 2008, 16:00
Wohnort: Bremen
Kontaktdaten:

Hallo mal wieder,
dieses Modul Optparse hält micht echt auf Trap =)
ich hab mir jetzt schon ne Menge Beispiele im Netz angesehen und werde daraus nicht schlau. Mein jetztiges Problem ist das ich den Schalter -r für read einbauen möchte gefolgt von der txt datei die eingelesen werden soll.
Ich weiss nicht wie ich dem Schalter einem bestimmten Codeblock zuweisen soll und das mit dem Filename zu kombinieren.

Hier mal der Code den ich habe:

Code: Alles auswählen

import sys
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-r", "--read", dest = "read",
                  help="File will be read")
(optionen, args) = parser.parse_args()
try:
    filename = raw_input("Please enter filename: ")	    
    if filename == "":
        filename = "test2.txt"
        compressfile = open(filename, "r")              
except IOError, why:                                   
    print "IOError:", why
except:
    print "Could not read file!"

try:
    line = compressfile.readline()                    
    while(line):                                        
        for element in line:
            change = changer(element)
            data_list.append(change)                    
            line = compressfile.readline()              
    compressfile.close()                                 
except StandardError, why:                              
    print "StandardError:", why
except:
    print "Could not read file!"


print data_list
Darunter sollen noch andere Schalter für Compress und Uncompress,
deswegen will ich das jeder Schalter seinen Bereich hat.
Zuletzt geändert von Schaf220 am Freitag 26. September 2008, 16:49, insgesamt 1-mal geändert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Code: Alles auswählen

import sys
from optparse import OptionParser
parser = OptionParser()
parser.add_option('-r', '--read', dest = 'read',
                  help='File that will be read',
                  metavar='FILE')
options, args = parser.parse_args()

print options.read
Und besorge dir einen Editor der die ganzen Whitespaces am Ende der Zeile löscht.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Schaf220
User
Beiträge: 113
Registriert: Montag 11. August 2008, 16:00
Wohnort: Bremen
Kontaktdaten:

Ok soweit so gut aber wie bekomme ich es jetzt so hingebogen das
nur bei diesem Schalter mir die txt Datei ausgegeben wird? Das mit dem
einlesen kenn ich ja bereits aber wie mach ich das so das nur bei der Benutzung von -r der test ausgegeben wird?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Code: Alles auswählen

if options.read:
    print 'Irgendwas machen'
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Schaf220
User
Beiträge: 113
Registriert: Montag 11. August 2008, 16:00
Wohnort: Bremen
Kontaktdaten:

Vielen Dank erstmal damit hast du mir schon mal ein großes Stückchen geholfen.
BlackJack

@Schaf220: Bitte entferne die ``except``\s ohne konkrete Ausnahmen. Damit wird wirklich alles abgefangen und "verschluckt". Wenn Du zum Beispiel einen Namen falsch schreibst, bekommst Du den `NameError` nur noch in Form einer nichtssagenden und in dem Fall falschen Fehlermeldung zu sehen.

Und wenn zum Beispiel das `open()` nicht klappt, dann ist der Name `compressfile` unbekannt und genau das führt dann in Zeile 19 zu einem `NameError` und Du gibtst zweimal eine Fehlermeldung für eigentlich das selbe Problem aus.

Klammern bei der Bedingung einer ``while``-Schleife sind unnötig und wenn man kein Leerzeichen dazwischen setzt, sieht das einem Funktionsaufruf zum Verwechseln ähnlich, was es ja aber nicht ist. Hier wäre aber sowieso eine ``for``-Schleife über `compressfile` die bessere Lösung.

Code: Alles auswählen

    for line in compressfile:
        data_list.extend(map(changer, line))
Antworten