In Python, esiste una classe Sniffer nel modulo csv che può essere utilizzata per indovinare il delimitatore di un determinato file e citare i caratteri. La sua strategia è (citato da docstring di csv.py):
[In primo luogo, cercare] per il testo racchiuso tra due apici identici (la probabile quotechar) che sono preceduti e seguiti dallo stesso personaggio (la probabile delimitatore). Per esempio:
,'some text',
La citazione con il maggior numero di vittorie, lo stesso con il delimitatore. Se non è presente alcuna quota, il delimitatore non può essere determinato in questo modo .
In tal caso, provare il seguente:
Il delimitatore dovrebbe verificarsi lo stesso numero di volte su ogni riga. Tuttavia, a causa di dati malformati, potrebbe non farlo. Non vogliamo che un approccio tutto o niente, quindi consentiamo piccole variazioni in questo numero .
- costruire una tabella della frequenza di ogni carattere su ogni riga.
- costruire una tabella di freqencies di questa frequenza (meta-frequenza?), Ad es. 'x è verificato 5 volte in 10 righe, 6 volte a 1000 righe, 7 volte in 2 righe'
- utilizzare la modalità del meta-frequenza per determinare l'atteso frequenza per tale carattere
- scoprire come spesso il carattere realtà incontra quell'obiettivo
- il personaggio che meglio soddisfa la sua obiettivo è il delimitatore
Per performan Per motivi, i dati vengono valutati in blocchi, quindi è possibile provare e valutare la porzione più piccola possibile dei dati, valutando pezzi aggiuntivi, se necessario.
Non ho intenzione di citare il codice sorgente qui - è nella directory Lib di ogni installazione Python.
Ricordate che il CSV può anche utilizzare il punto e virgola invece di virgole come delimitatori (ad esempio, nelle versioni tedesche di Excel, CSV sono punto e virgola delimitato da virgole, perché vengono utilizzati come separatori decimali in Germania ...)
fonte
2009-04-17 21:40:48
Mostrare all'utente il risultato prima dell'importazione è una buona mossa, penso, ma indovinare intelligentemente è ottimo anche per la nostra esperienza. Quindi la combinazione è davvero bella! – BerggreenDK
un suggerimento-Se stai facendo una finestra di anteprima e vuoi "indovinare" quale è il delimitatore corretto, allora potresti dividere un possibile delim. e vedere se le prime dieci righe hanno tutti lo stesso numero di campi, confrontarle con tutte le altre delimitazioni normali. È una buona scommessa che si lavori con lo stesso numero di campi fino in fondo. Come [Jon Skeet ha detto] (https://stackoverflow.com/questions/761932/how-should-i-detect-which-delimiter-is-used-in-a-text-file/761949#761949) è perfettamente possibile è una scheda E delimitata da virgola delimitata da virgole, ma quella scheda era la scelta desiderata. – PsychoData