[PYTHON] Memorandum (Gegenmaßnahmen gegen Unicode-Dekodierungsfehler beim Lesen von CSV-Dateien)

** Du kannst es mit Python automatisieren, oder? Schön dich kennenzulernen, also werde ich mein Bestes geben, Teil 1 **

** ~~ Schreiben Sie zuerst nur die Schlussfolgerung ~~ ** Bei Angabe mit open (CSV-Datei, Kodierung = Zeichencode) Sie können den "in der CSV-Datei verwendeten Zeichencode" als Zeichencode verwenden. Diesmal war es eine Datei, die Japanisch enthielt, daher musste sie mit Shift-jis angegeben werden.
** ~~ Tagebuch ist mir egal ~~ ** Daten mit interner Software an CSV ausgeben → Die verantwortliche Person formt die Excel-Datei mit einem guten Gefühl → Senden Sie die Excel-Datei per E-Mail an die andere Partei Mir wurde gesagt, ich solle Python verwenden, um die oben genannte Arbeit gut zu automatisieren, und so beschloss ich, mein Bestes ohne Start zu geben. Ich bin ein absoluter Amateur in Bezug auf Python, aber es scheint, dass ich es schaffen kann, wenn ich etwas über VBA weiß. Ist es wahr? ** ~~ Tagebuch bis hierher ~~ **

** ~~ Betreff ~~ ** ** - Beim Lesen der CSV-Datei habe ich einen UnicodeDecodeError erhalten, daher möchte ich ihn beheben **

** ~~ Erklärung der Situation von hier ~~ ** Ich habe zunächst die Grundfunktionen von Python mit Google Colaboratory überprüft. Platzieren Sie eine geeignete CSV-Datei direkt unter dem Google-Laufwerk. Erstellen Sie ein neues Notizbuch im Google Colaboratory. Probieren Sie ein Beispielprogramm aus, das CSV liest und ausgibt. Ref:https://note.com/092i034i/n/n76f2c2de197

test


import csv #Wenn Sie dies schreiben, können Sie anscheinend mit CSV-Dateien umgehen

csvfile = open('/content/drive/My Drive/test.csv') #Importierte die CSV-Datei in die Python-Variable CSV-Datei
reader = csv.DictReader(csvfile) #Ich habe die Informationen in der CSV-Datei irgendwie in eine Variable namens reader geworfen

for row in reader: #Ich bin mir immer noch nicht sicher. Es sieht aus wie iterative Verarbeitung, aber ...

 print(row) #Derjenige, der den Inhalt der variablen Zeile ausgibt

Es wird jedoch nicht kompiliert. Ich bekomme eine Fehlermeldung.

error-message


UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-30-e6400dcd8fdb> in <module>()
      4 reader = csv.DictReader(csvfile)
      5 
----> 6 for row in reader:
      7  print(row)

Als eine Person, die dachte, dass seine Englischnoten überwältigend und tödlich waren, und sogar die Ankündigung von Smash Bra's "Break the target!" Eine Sprache einer anderen Welt war, fühlte er sich zu diesem Zeitpunkt bereits krank, aber eine. Es bleibt nichts anderes übrig, als einzeln daran zu arbeiten.

Anscheinend ist die Dekodierung fehlgeschlagen, wenn der Inhalt des Variablenlesers der Zeile zugewiesen wurde. Bei csvfile = open (test.csv) ist kein Fehler aufgetreten.

`Der Ablauf der Programmverarbeitung, der aus diesem Ergebnis hervorgeht

  1. Codieren (verschlüsseln) Sie die CSV-Datei auf dem Laufwerk und importieren Sie sie in die Python-Variable csvfile
  2. Ersetzen Sie den Inhalt der Variablen csvfile gemäß der codierten Regel csv.dictreader durch die Variable Reader.
  3. Entschlüsseln Sie den Inhalt des Variablenlesers und übertragen Sie ihn in die Variablenzeile (hier ist die Entschlüsselung fehlgeschlagen und ein Fehler aufgetreten).
  4. Geben Sie den Inhalt der Variablen Row von der ersten bis zum Ende aus `

Daher dachte ich, dass etwas mit der Entschlüsselungsmethode nicht stimmt, wenn der Inhalt des Lesegeräts in die Zeile verschoben wird. Das Nachschlagen der Fehlermeldung im Internet scheint anders zu sein.

`So etwas wie der richtige Verarbeitungsablauf

  1. Die CSV-Datei auf dem Laufwerk enthält Japanisch, daher wurde sie mit Shift-jis codiert
  2. Sofern nicht anders angegeben, codiert Python den Inhalt der CSV-Datei mit UTF-8 und importiert ihn in die Variable csvfile.
  3. Zu diesem Zeitpunkt besteht der Inhalt der Variablen csvfile aus "verstümmelten Zeichen, in denen die Shift-jis-Datei zwangsweise mit UTF-8 codiert wird".
  4. Aus irgendeinem Grund ist es jedoch auch in diesem Zustand möglich, die Variable csvfile nach der Regel von csv.dict reader der Variablen Reader zuzuweisen
  5. Dekodieren Sie den Inhalt des Variablenlesers und übertragen Sie ihn in die Variablenzeile (es scheint, dass verstümmelte Zeichen nur sichtbar sind, wenn Sie hier nicht dekodieren können).
  6. Geben Sie den Inhalt der Variablen Row von der ersten bis zum Ende aus `

Ich weiß nicht, warum csv.dictreader in Ordnung ist. Nachdem ich es repariert habe, ist die Kompilierung bestanden, daher werde ich es vorerst als solches teilen.

** Auch wenn zum Zeitpunkt der Codierung ein Problem auftritt, scheint es zum Zeitpunkt der Decodierung durch Python-Verarbeitung entdeckt zu werden. ** ** ** Dies ist wahrscheinlich etwas, das ich nicht verstehe, weil ich keine Kenntnisse über das Codieren und Decodieren habe ... aber ich werde nicht über die Hauptautomatisierung sprechen, also werde ich diesmal darauf verzichten.

Nach dem ersten Tag kann ich jedoch nur noch die CSV-Datei lesen. Ist das wirklich in Ordnung? Wenn ich Olimer bin, kann ich Hokotate nicht verlassen und in den Boden zurückkehren. Stimmt es wirklich, dass Sie nur Kenntnisse über VBA benötigen? Angst.

Ergänzung: Code, wenn die Kompilierung nach dem Fixieren bestanden wird


import csv

csvfile = open('/content/drive/My Drive/test.csv',encoding="shift-jis")  #Japanische CSV-Datei verschieben-Import mit jis
reader = csv.DictReader(csvfile)

for row in reader:
 print(row) 

Recommended Posts