2010-06-06 7 views
12

Kann jemand eine effektive Möglichkeit zur Überprüfung bereitstellen, ob eine Datei das CSV-Format mit Python hat?Prüfen, ob die Datei ein CSV-Format mit Python hat

+1

Willkommen bei stackoverflow. Ihre Frage könnte mehr Details verwenden. Könnten Sie als Vorspann bitte definieren, was Sie mit "CSV-Format" meinen? Sie müssen dieses Format sorgfältig definieren. Existieren in diesem Format Escapezeichen, Kommentarzeichen oder Anführungszeichen? Wenn diese Frage Hausaufgaben ist, fügen Sie bitte ein Tag namens "Hausaufgaben" hinzu, damit Antworten Ihnen die richtige Art von Anleitung geben können. –

+1

Ich meine auf CSV-Datei Komma-getrennte Werte-Datei siehe http://en.wikipedia.org/wiki/Comma-separated_values ​​für weitere Details.; – Joe

+1

Wenn durch CSV "Komma getrennte Werte" gemeint ist, gibt es keinen Standard dieses Formats. – Max

Antwort

0

Python hat eine csv module, also könnten Sie versuchen, es unter einer Vielzahl von verschiedenen Dialekten zu analysieren.

-3

Sie müssen klar überlegen, was Sie für eine CSV-Datei halten.

Zum Beispiel, welche Art von Zeichen zwischen den Kommas auftreten kann. Ist es nur Text? Kann es auch Unicode-Zeichen sein? Sollte jede Zeile die gleiche Anzahl an Kommas haben?

Es gibt keine genaue Definition einer mir bekannten CSV-Datei. Normalerweise ist es ein ASCII-Text, der durch Kommas getrennt ist und jede Zeile hat die gleiche Anzahl an Kommas und wird vom Zeilenabschlusszeichen der Plattform beendet.

Wie auch immer, sobald Sie die obigen Fragen beantworten, werden Sie ein bisschen weiter auf dem Weg zu wissen, wie Sie erkennen, wenn eine Datei eine CSV-Datei ist.

22

Sie könnten etwas wie das Folgende versuchen, aber nur weil Sie einen Dialekt zurück von csv.Sniffer bekommen, wird wirklich nicht ausreichen, um zu garantieren, dass Sie ein gültiges CSV-Dokument haben.

csv_fileh = open(somefile, 'rb') 
try: 
    dialect = csv.Sniffer().sniff(csv_fileh.read(1024)) 
    # Perform various checks on the dialect (e.g., lineseparator, 
    # delimiter) to make sure it's sane 

    # Don't forget to reset the read position back to the start of 
    # the file before reading any entries. 
    csv_fileh.seek(0) 
except csv.Error: 
    # File appears not to be in CSV format; move along 
+0

* "... wird nicht ausreichen, um zu garantieren ..." *: Ja. Ohne einen Dialekt bereitzustellen, hat meins eine .ZIP als gültige CSV mit @ als Trennzeichen erkannt – alanjds

-3

Versuchen Sie es als CSV zu analysieren und sehen Sie, wenn Sie einen Fehler erhalten.

Verwandte Themen