Behandeln Sie Excel-CSV-Dateien mit Python

Pythons csv Paket ist sehr nützlich. Es macht den mühsamen Fluchtprozess richtig. Besonders nützlich für die Verarbeitung von Dateien, die als Excel-Dateien gesendet werden. Schließlich können Sie Excel CSV mit "dialect =" excel "" richtig lesen.

Wenn Japanisch involviert ist, wird das Problem jedoch schnell problematisch. Was ist das Wesentliche des Problems? Zunächst ist Folgendes über den Umgang mit TSV in Excel bekannt.

--Excel tsv export is utf-16 (mit Stückliste) --Excel kann tsv von utf-16 mit Stückliste direkt lesen (für die Trennung zwischen Kommas ist ein Assistent erforderlich). --csv (durch Kommas getrennt) kann ausgegeben und gelesen werden, wird jedoch nicht empfohlen (später beschrieben).

Daraus können Sie ersehen, dass es am besten ist, mit utf-16-Dateien mit Stückliste zu arbeiten. Der beste Weg, dies zu handhaben, ist die Verwendung des io -Pakets.

with io.open(path, encoding='utf-16') as f:
  ...

Ich habe es kurz geschrieben, aber es ist wirklich wichtig, das "io" -Paket zu verwenden. utf-16 ist ein ziemlich unhandliches Format. Erstens gibt es Stückliste. Wenn in diesem Zustand "cr + lf" ausgeführt wird, wird "\ 0" in Byteeinheiten eingefügt. Wenn Sie also normalerweise open () verwenden, verhält es sich wie ein Rätsel.

Jetzt tritt hier das Problem auf. Bei Verwendung der Python2-Serie unterstützt das Paket "csv" kein "Unicode". Daher kann es nicht gelesen werden, wenn es mit der obigen Methode geöffnet wird. Wenn Sie bei gutem Wetter "offen" verwenden, ist das Lesen aus den oben genannten Gründen schwierig. Früher habe ich mit csv von shift-jis exportiert, aber Excel scheint intern Unicode zu sein, und manchmal ist der Trübungspunkt ein anderes Zeichen und befindet sich zu diesem Zeitpunkt in einem nicht normalisierten Zustand Als ich es ausgab, verschwanden alle trüben Punkte. Daher empfehle ich diese Methode auch nicht.

Wie man Unicode mit "csv" liest, wird in Ende des Handbuchs beschrieben. Die richtige Antwort besteht darin, den "Unicode" -Stream einmal in utf-8 zu codieren, ihn mit dem "csv" -Paket in diesem Zustand zu lesen, ihn zu teilen und utf-8 erneut zu decodieren. Das gleiche gilt beim Schreiben. Setzen Sie einfach "Unicode" auf "utf-8", schreiben Sie in "StringIO" und konvertieren Sie es erneut in "Unicode", bevor Sie es in eine Datei ausspucken. Es war zweimal überwältigend problematisch, aber ich hatte viele Jahre mit Excel zu kämpfen und bekam schließlich die stabilste Ausgabe. In Python3 unterstützt das "csv" -Paket übrigens "str" ("Unicode" in 2), sodass Sie es mit "io" öffnen und normal verarbeiten können.

Es wäre dunkel, wenn ich diese Prozesse jedes Mal schreiben würde, also habe ich daraus eine Bibliothek gemacht.

https://github.com/unnonouno/excelcsv

Vielleicht werden alle oben genannten Probleme vermieden.

Was du nicht tun solltest

Das ist alles, aber lassen Sie uns überprüfen, was Sie nicht tun sollten und warum.

Codieren Sie für jedes Element mit utf-16

.encode ('utf-16') erzeugt eine utf-16-Zeichenfolge mit Stückliste. Dies ist der entscheidende Unterschied zu anderen Kodierungen.

>>> u'a'.encode('utf-16')
'\xff\xfea\x00'

Wenn Sie einen Code wie "[x.encode ('utf-16') für x in Zeile]" schreiben, wird eine mysteriöse Zeichenfolge mit Stückliste generiert. Dieser Ansatz ist nutzlos. Stückliste sollte nur am Anfang der Datei enthalten sein. Der beste Weg, dies zu vermeiden, besteht darin, es im Prinzip mit "Unicode" zu behandeln und es im Dateiausgabeteil zu steuern. Es ist das "io" -Paket, das dies tut, und Sie sollten es nicht selbst mit dem regulären "open" codieren. Eine andere Problemumgehung besteht darin, mit utf-8 in "StringIO" auszugeben, das Ganze vor dem Schreiben in die Datei in "Unicode" zu konvertieren und es dann wieder in utf-16 zu konvertieren. Es ist jedoch sauberer, "io" zu verwenden.

Mit open öffnen, analysieren und dann dekodieren

utf-16 bedeutet, dass das Zeilenvorschubzeichen und das Tabulatorzeichen, die Sie analysieren möchten, ebenfalls in 2 Bytes geschrieben sind. Wenn Sie das Python2-Paket "csv", das in 1-Byte-Einheiten verarbeitet wird, verarbeiten lassen, bleiben unnötige "\ 0" -Zeichen übrig. Dieser Ansatz kann nur mit utf-8, shift-jis usw. verwendet werden, bei denen die Ascii-Zeichen intakt bleiben.

Exportieren und dann mit Shift-JIS CSV laden

Excel scheint die Daten intern in Unicode zu haben. Am schlimmsten ist jedoch, dass die Trübung als separates Zeichen gespeichert wird. Wenn Sie in diesem Zustand mit Shift-Jis exportieren, verschwindet die gesamte Trübung. Ich wünschte, ich könnte es normalisieren. Daher ist das Exportieren aus Excel eine utf-16-Textauswahl. Es ist umständlich zu handhaben, aber es kann nicht geholfen werden.

Recommended Posts

Behandeln Sie Excel-CSV-Dateien mit Python
Behandle Excel mit Python
Excel mit Python
[Easy Python] Lesen von Excel-Dateien mit openpyxl
[Easy Python] Lesen von Excel-Dateien mit Pandas
Behandle Rabbimq mit Python
[Python] CSV-Dateien lesen
Betreiben Sie Excel mit Python (1)
Betreiben Sie Excel mit Python (2)
Betreiben Sie Excel mit Python Open Pyxl
Lesen Sie CSV mit Python-Pandas
Sortieren von Bilddateien mit Python (2)
Sortieren Sie große Dateien mit Python
Sortieren von Bilddateien mit Python (3)
[Tipps] Behandle Athena mit Python
Bilddateien mit Python sortieren
Integrieren Sie PDF-Dateien in Python
TXT-Dateien mit Python lesen
Schreiben Sie mit Python in csv
Arbeiten mit JSON-Dateien in Matlab
Laden Sie die CSV-Datei mit Python herunter
Bearbeiten Sie Excel-Dateien aus Python mit xlrd (persönliches Memo)
Entfernen Sie Überschriften aus CSV-Dateien mit mehreren Formaten mit Python
Verschieben von CSV-Dateien mit Python Teil 1
Behandeln Sie Base91-Schlüssel mit Python + Redis.
Solver> Link> Lösen Sie Excel Solver mit Python
Machen Sie Apache Log CSV mit Python
Extrahieren Sie Zip-Dateien rekursiv mit Python
Verarbeiten Sie große Excel-Dateien mit Python, um die Produktivität zu verbessern
Bearbeiten von EAGLE .brd-Dateien mit Python
Einfache Handhabung von Listen mit Python + SQLite3
Ausgabe in eine CSV-Datei mit Python
[Python] POST-WAV-Dateien mit Anforderungen [POST]
Stilvolle Technik zum Einfügen von CSV-Daten in Excel mit Python
Erstellen Sie Heroku, Flask, Python, Nyanko Bulletin Board mit "CSV-Datei"
Lesen Sie Dateien parallel zu Python
Lesen und Schreiben von CSV mit Python
Excel, CSV Import / Export mit Django
So importieren Sie CSV- und TSV-Dateien mit Python in SQLite
[Für Anfänger] Lesen Sie Excel / CSV-Dateien mit Google Colaboratory in DataFrame
[AWS] Verwenden von INI-Dateien mit Lambda [Python]
Spielen Sie eine Audiodatei von Python mit Interrupt ab
CSV-Datei mit Python lesen (CSV-Datei herunterladen und analysieren)
Zeichnen Sie Nozomi Sasaki in Excel mit Python
Erstellen Sie schnell eine Excel-Datei mit Python #python
Konvertieren Sie Excel-Daten mit Python in JSON
Lesen und Schreiben von CSV-Dateien mit Numpy
Lesen und Schreiben von JSON-Dateien mit Python
Laden Sie mit Python Dateien im Web herunter
Versuch, SQLite3 mit Python zu handhaben [Hinweis]
Erstellen Sie eine Excel-Datei mit Python + Ähnlichkeitsmatrix
[Teil1] Scraping mit Python → Organisieren Sie bis zu CSV!
Excel-Tabellenerstellung mit Python [Fortschrittsverwaltungstabelle]
FizzBuzz in Python3