Wie kann csvkit lange ASCII-Zeilen erkennen?

847
isomorphismes

Ich verwende Ubuntu und habe diese CSV-Datei heruntergeladen, die filebesagt, dass sie wie folgt codiert ist:

ASCII text, with very long lines, with CRLF line terminators 

Wenn ich jedoch vorbeikomme csvcut -e ASCII datafile, bekomme ich:

Your file is not "utf-8" encoded. Please specify the correct encoding with the -e flag. Use the -v flag to see the complete error. 

und wenn ich vorbei gehe csvcut -e ASCII datafile, bekomme ich:

Your file is not "ASCII" encoded. Please specify the correct encoding with the -e flag. 

(Weder die Großschreibung noch das Kopieren der genauen fileAusgabe verbessern dies.)


Der vollständige Fehler ( -v) sieht folgendermaßen aus:

Traceback (most recent call last): File "/usr/local/bin/csvcut", line 9, in <module> load_entry_point('csvkit==0.9.2', 'console_scripts', 'csvcut')() File "/usr/local/lib/python2.7/dist-packages/csvkit-0.9.2-py2.7.egg/csvkit/utilities/csvcut.py", line 64, in launch_new_instance utility.main() File "/usr/local/lib/python2.7/dist-packages/csvkit-0.9.2-py2.7.egg/csvkit/utilities/csvcut.py", line 53, in main for row in rows: File "/usr/local/lib/python2.7/dist-packages/csvkit-0.9.2-py2.7.egg/csvkit/unicsv.py", line 51, in next row = next(self.reader) File "/usr/local/lib/python2.7/dist-packages/six.py", line 535, in next return type(self).__next__(self) File "/usr/local/lib/python2.7/dist-packages/csvkit-0.9.2-py2.7.egg/csvkit/unicsv.py", line 35, in __next__ return next(self.reader).encode('utf-8') File "/usr/lib/python2.7/codecs.py", line 615, in next line = self.readline() File "/usr/lib/python2.7/codecs.py", line 530, in readline data = self.read(readsize, firstline=True) File "/usr/lib/python2.7/codecs.py", line 477, in read newchars, decodedbytes = self.decode(data, self.errors) UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128) 
0

1 Antwort auf die Frage

0
4ae1e1

Ihre Nutzdaten sind weder ASCII- noch UTF-8-codiert. Sie können die Nicht-ASCII-Bits schnell finden:

awk '/[^\x00-\x7F]/{ print NR ":", $0 }' data.csv | less 

Sie werden Dinge wie Briarcliffe College�??Patchoguein einem UTF-8-codierten Terminalemulator sehen, was darauf hindeutet, dass dies keine UTF-8-codierte Datei ist. Und die erste Vermutung der Kodierung? ISO 8859-1, Westeuropäisch. Lass uns testen:

# piping to /dev/null to suppress printing and speed up processing (printing to tty is slow) csvcut -e iso-8859-1 data.csv >/dev/null 

Kein Fehler diesmal, voila!