2010-06-06 7 views
12

Czy ktoś może efektywnie sprawdzić, czy plik ma format CSV za pomocą Pythona?Sprawdź, czy plik ma format CSV z Pythonem

+1

Witamy w stackoverflow. Twoje pytanie może bardziej szczegółowo opisać. Czy jako starter możesz zdefiniować, co masz na myśli przez "format csv?" Musisz dokładnie zdefiniować ten format. Czy istnieją znaki ucieczki, znaczniki komentarza lub znaki cudzysłowu w tym formacie? Jeśli to pytanie jest zadaniem domowym, dodaj znacznik o nazwie "praca domowa", dzięki czemu odpowiedzi mogą dostarczyć odpowiedniego rodzaju wskazówek. –

+1

Mam na myśli plik CSV Plik wartości rozdzielonych przecinkami patrz http://pl.wikipedia.org/wiki/Comma-separated_values ​​po więcej szczegółów. – Joe

+1

Jeśli chodzi o csv "wartości rozdzielone przecinkami", to nie ma standartu tego formatu. – Max

Odpowiedz

0

Python ma numer csv module, więc można go parsować pod różnymi dialektami.

-3

Musisz jasno myśleć o tym, co uważasz za plik CSV.

Na przykład, jakie znaki mogą występować między przecinkami. Czy jest to tylko tekst? Czy może to być także znak Unicode? Czy każda linia powinna mieć taką samą liczbę przecinków?

Nie ma ścisłej definicji pliku CSV, o którym jestem świadomy. Zwykle jest to tekst ASCII oddzielony przecinkami, a każda linia ma tę samą liczbę przecinków i jest przerywana przez terminator linii twojej platformy.

W każdym razie, po udzieleniu odpowiedzi na powyższe pytania będziesz nieco dalej na drodze do ustalenia, jak wykryć, kiedy plik jest plikiem CSV.

22

Możesz wypróbować coś takiego, ale tylko dlatego, że otrzymujesz dialekt z powrotem z csv.Sniffer, to naprawdę nie wystarczy, aby zagwarantować, że masz ważny dokument CSV.

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

* "... nie wystarczy do zagwarantowania ..." *: Tak. Bez podania dialektu mój wykrył .ZIP jako poprawny plik CSV, z @ jako separatorem – alanjds

-3

Spróbuj przetworzyć go jako plik CSV i sprawdź, czy wystąpił błąd.