csv in Python 2.5

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
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Dienstag 10. April 2007, 16:26

Folgendes einfaches Programm

Code: Alles auswählen

import csv

print csv.QUOTE_MINIMAL, type(csv.QUOTE_MINIMAL)

class ExcelDe(csv.Dialect):
    def __init__(self):
        self.quoting = csv.QUOTE_MINIMAL
        

csv.register_dialect("excel_de", ExcelDe)
funktioniert unter dem von Suse mitgelieferten Python 2.4 und auf Win mit Python 2.4. Mit selbstkompiliertem Python 2.5 unter Linux und Python 2.5 unter Win gibts ne merkwuerdige Fehlermeldung:

Code: Alles auswählen

rbreu@zam285:~> python2.4 test.py
0 <type 'int'>
rbreu@zam285:~> python2.5 test.py
0 <type 'int'>
Traceback (most recent call last):
  File "test.py", line 10, in <module>
    csv.register_dialect("excel_de", ExcelDe)
TypeError: "quoting" must be an integer
Hab ich was entscheidendes verpasst oder ist das eventuell ein Bug?
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Dienstag 10. April 2007, 16:34

Code: Alles auswählen

import csv 

print csv.QUOTE_MINIMAL, type(csv.QUOTE_MINIMAL) 

#class ExcelDe(csv.Dialect): 
#    def __init__(self): 
#        self.quoting = csv.QUOTE_MINIMAL
        

csv.register_dialect("excel_de", csv.QUOTE_MINIMAL)

So funktionierts auf jedenfall...

Code: Alles auswählen

import csv 

print csv.QUOTE_MINIMAL, type(csv.QUOTE_MINIMAL) 

class ExcelDe(csv.Dialect): 
    def __init__(self): 
        self.quoting = csv.QUOTE_MINIMAL 
        

csv.register_dialect("excel_de", ExcelDe.quoting)

Und so auch. ExcelDe is ja'n Classobj... ich weiß nit, ob das dein Problem löst oO' Ich weiß auch nicht so genau, was du machen möchtest.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Dienstag 10. April 2007, 16:46

Ich kann den Fehler unter Windows mit Py2.5 reproduzieren.

Möglicherweise schafft Py2.5.1 Abhilfe: http://www.python.org/download/releases/2.5.1/NEWS.txt (vgl. Abschnitt "Enhancements to the csv module")
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Dienstag 10. April 2007, 16:51

Python Doku hat geschrieben:register_dialect(name[, dialect][, fmtparam])
Associate dialect with name. name must be a string or Unicode object. The dialect can be specified either by passing a sub-class of Dialect, or by fmtparam keyword arguments, or both, with keyword arguments overriding parameters of the dialect.
Ich will das schon gerne mit ner Klasse, da ich mehrere Formatparemeter angeben will. Aber ich hatte die Fehlermeldung falsch verstanden, ich dachte, das Problem liegt an dem self.quoting=... .

Aber er versteht beim register_dialect-Aufruf anscheinend nicht, dass es sich um eine dialect-klasse handelt und nicht um den quoting-Format-Parameter. Mmhh...

Code: Alles auswählen

class ExcelDe(csv.Dialect):
    def __init__(self):
        self.delimiter = ";"
        
csv.register_dialect("excel_de", dialect=ExcelDe)

Code: Alles auswählen

rbreu@zam285:~> python2.4 test.py
Traceback (most recent call last):
  File "test.py", line 8, in ?
    csv.register_dialect("excel_de", dialect=ExcelDe)
TypeError: register_dialect() takes no keyword arguments
rbreu@zam285:~> python2.5 test.py
Traceback (most recent call last):
  File "test.py", line 8, in <module>
    csv.register_dialect("excel_de", dialect=ExcelDe)
TypeError: "quoting" must be an integer
Hilft auch nicht...
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Dienstag 10. April 2007, 16:52

YOGi: Ah, danke, das hatte ich gar nicht gesehen.
Antworten