Vorsichtsmaßnahmen bei der Eingabe von CSV mit Python und der Ausgabe an json, um exe zu erstellen

Wie der Titel schon sagt, werde ich ein Memorandum mit Notizen schreiben, wenn ich mit Python aus CSV eingebe und es an json ausgebe, um es exe zu machen. Die Beispielimplementierung ist ein ganz persönliches Werkzeug, daher gebe ich Ihnen nur einen Überblick. Das Wichtigste ist die Fehlermeldung und das Mittel.

CSV, die einen Dekodierungsfehler verursacht

Laden Sie zuerst csv. Bereiten Sie die Daten in csv mit dem Namen input.csv vor und lesen Sie sie.

import csv

csv_file = open("./input.csv", "r")
c = csv.DictReader(csv_file)

Wenn ich hier versuche, den Inhalt von csv zu betrachten, wird plötzlich (wahrscheinlich) der folgende Fehler angezeigt.

Exception has occurred: UnicodeDecodeError
'cp932' codec can't decode byte 0xef in position 0: illegal multibyte sequence
  File "C:\Users\hoge\fuga.py", line 19, in <module>
    for row in c:

Sie werden beschimpft, weil Sie nicht dekodieren können. Dies liegt daran, dass Python versucht, die utf-8-Dateishift-jis zu erstellen. Es muss wie folgt geändert werden.

csv_file = open("input.csv", "r",encoding="utf-8-sig")

Alle gleichen Daten json

Der Teil, der diesmal am nervigsten war.

#Auszug aus Parametern aus csv
params = []
for row in c:
    points.append(row)
n = len(params)

#Laden Sie json und sichern Sie einen Parameterrahmen
import json
json_open = open('sample.json', 'r')
j = json.load(json_open)
for i in range(n-1):
    j["Movements"].append(j["Movements"][0])

Ich habe in der unteren Reihe etwas Unangenehmes getan, was die Ursache des Problems war, aber sample.json hat eine Datenvorlage, die auf die Anzahl der Parameterzeilenn erweitert wird. Daher habe ich die Methode n-1 Mal kopiert. Infolgedessen wurden "n" Frames erfolgreich in der "Movements" -Taste der json-Daten "j" erstellt. Danach wird die "for" -Anweisung einfach gedreht, um die Daten einzufügen.

…… Aber nachdem ich die Daten eingegeben hatte, war ich beunruhigt über das mysteriöse Ergebnis, dass ** aus irgendeinem Grund alle Zeilen die gleichen Daten haben **.

Nach einigem Debuggen stellte ich fest, dass jede Eingabe jede Zeile neu schreibt, was bedeutet, dass ** jede Zeile auf dieselben Daten verweist **. Selbst wenn sich die scheinbaren Daten in der Zeile "n" befinden, beziehen sich alle auf nur eine Daten, und wenn eine geändert wird, sind alle Daten betroffen.

Warum ist das passiert?

Bei Typen wie "int" und "str" wird eine Variable mit "=", wenn Sie Änderungen vornehmen, als "eine andere Variable" betrachtet und eine ID zugewiesen, jedoch "list" Wenn Sie nach dem Kopieren der Variablen mit = bearbeiten (tatsächlich konnte sie nicht kopiert werden), werden die Originaldaten bearbeitet. Ich wusste es als Wissen, aber so war es auch "diktieren". Die einzige Lösung besteht darin, die Variablen mit einer als Hardcopy bezeichneten Technik zu kopieren.

#Auszug aus Parametern aus csv
params = []
for row in c:
    points.append(row)
n = len(params)

#Laden Sie json und sichern Sie einen Parameterrahmen
import json
import copy
json_open = open('sample.json', 'r')
j = json.load(json_open)
for i in range(n-1):
    new_j = copy.deepcopy(j["Movements"][0])
    j["Movements"].append(new_j)

In diesem Fall musste es "Deepcopy" (tiefe Kopie) statt nur "Kopie" (flache Kopie) sein.

Exe das funktioniert nicht

Es gibt ein Modul namens "pyinstaller", das es in eine Exe verwandelt, damit auch Leute, die kein Python haben, es ausführen können. Als ich versuchte, dies zu "pip", konnte ich es aufgrund eines Fehlers nicht installieren, und wenn ich herumging, konnte ich einfach die Version von pip ("20" → "18") herabstufen, so dass es mir gelang. Als ich jetzt versuchte, es zu reproduzieren, war aus irgendeinem Grund sogar der neueste Pip erfolgreich, sodass der Fehler nicht reproduziert werden kann. Es tut mir Leid.

Also habe ich es mit pyinstaller sicher zu einer Exe gemacht, aber selbst wenn ich es laufen lasse, endet es sofort. Es spuckt nicht einmal den ersten "Druck" aus, den ich zum Debuggen eingegeben habe, daher scheint es zum Zeitpunkt des "Imports" ein Problem zu geben. Also werde ich nacheinander Hexen für die folgenden Module jagen, die ich tatsächlich eingesetzt habe.

import json
import pprint
import csv
import cmath
import math
import numpy as np
import copy
import os

Infolgedessen wurde es durch "numpy" verursacht. Glücklicherweise habe ich den Teil, der numpy benötigte, nicht im Programm verwendet (ich habe np.pi verwendet, aber ich brauche ihn nicht mehr), also habe ich das Modul einfach gelöscht. Wenn Sie ein Programm ausführen müssen, das numpy verwendet, um genau zu berechnen, denken Sie noch einmal darüber nach ...

Zusammenfassung

Es tut mir leid, dass es viele Inhalte gibt, die "Ich habe es geschafft, aber ich habe es nicht verstanden", aber ich werde immer mehr vergessen, wenn ich solche Dinge nicht sammle, also habe ich es für mich selbst geschrieben. Ich hatte bis jetzt Angst, so etwas zu überspringen, also werde ich von nun an aktiv Programmaufzeichnungen wie dieses Tagebuch schreiben.

Code

Es ist ein ganz persönliches Werkzeug, daher denke ich, dass es für niemanden nützlich ist, aber vorerst.


import json
import pprint
import csv
import cmath
import math
import copy
import os

json_open = open('./sample.json', 'r')
j = json.load(json_open)

print("sample.Geladener json")

csv_file = open("./input.csv", "r",encoding="utf-8-sig")
c = csv.DictReader(csv_file)

points = []

for row in c:
    points.append(row)

n = len(points)

for i in range(n-1):
    new_j = copy.deepcopy(j["Movements"][0])
    j["Movements"].append(new_j)

for i,p in enumerate(points):
    x = float(p['X'])
    y = float(p['Y'])
    z = float(p['Z'])
    duration = float(p['Duration'])
    j["Movements"][i]["Duration"] = duration
    j["Movements"][i]["StartPos"]["x"] = x
    j["Movements"][i]["StartPos"]["y"] = y
    j["Movements"][i]["StartPos"]["z"] = z
    j["Movements"][i-1]["EndPos"]["x"] = x
    j["Movements"][i-1]["EndPos"]["y"] = y
    j["Movements"][i-1]["EndPos"]["z"] = z
    y -= 1.5
    c = complex(-x,-z)
    rad = cmath.phase(c)
    deg = -math.degrees(rad)+90
    #print(deg)
    j["Movements"][i]["StartRot"]["y"] = deg 
    j["Movements"][i-1]["EndRot"]["y"] = deg 
    c2 = complex(abs(c),y)
    rad2 = cmath.phase(c2)
    deg2 = math.degrees(rad2)
    #print(-deg2)
    j["Movements"][i]["StartRot"]["x"] = deg2 
    j["Movements"][i-1]["EndRot"]["x"] = deg2

pprint.pprint(j)

with open('output.json', 'w') as f:
    json.dump(j, f, indent=4)

print("Die Arbeit abgeschlossen")
end = input()

Recommended Posts

Vorsichtsmaßnahmen bei der Eingabe von CSV mit Python und der Ausgabe an json, um exe zu erstellen
Kratzen Sie das Essen mit Python und geben Sie es an CSV aus
Konvertieren Sie JSON mit Python von Splunk in CSV
[Python / Ruby] Mit Code verstehen Wie man Daten aus dem Internet abruft und in CSV schreibt
Fraktal zum Erstellen und Spielen mit Python
2. Erstellen Sie mit Python einen Entscheidungsbaum von 0 und verstehen Sie ihn (2. Grundlagen des Python-Programms)
Lesen Sie die CSV-Datei mit Python und konvertieren Sie sie unverändert in DataFrame
Machen Sie mit Python einen Entscheidungsbaum von 0 und verstehen Sie ihn (4. Datenstruktur)
Geben Sie den Bericht mit Python aus DB in PDF aus, hängen Sie ihn automatisch an eine E-Mail an und senden Sie ihn
Lesen Sie JSON mit Python und geben Sie CSV aus
Generieren Sie mit Python eine Einfügeanweisung aus CSV.
WEB Scraping mit Python und versuchen, aus Bewertungen eine Wortwolke zu machen
Tipps und Vorsichtsmaßnahmen beim Portieren von MATLAB-Programmen nach Python
So konvertieren Sie eine JSON-Datei mit Python Pandas in eine CSV-Datei
Erhalten Sie E-Mails von Google Mail und beschriften Sie sie mit Python3
Lesen Sie die json-Datei mit Python, formatieren Sie sie und geben Sie json aus
Versuchen Sie es mit GUI, PyQt in Python
Wenn es schwierig ist, beim Senden von E-Mails mit Python lokal einen SMTP-Server einzurichten.
Verknüpfen Sie Python Enum mit einer Funktion, um es aufrufbar zu machen
Ich habe einen Server mit Python-Socket und SSL erstellt und versucht, über den Browser darauf zuzugreifen
Ich habe versucht, einen Generator zu erstellen, der mit Python eine C # -Containerklasse aus CSV generiert
Schreiben Sie mit Python in csv
[Python Kivy] So erstellen Sie mit pyinstaller eine exe-Datei
Ich habe versucht, die Benutzeroberfläche neben Python und Tkinter dreiäugig zu gestalten
Wie man Japanern nicht entgeht, wenn man mit json in Python umgeht
Schließen Sie sich csv an, das von Python-Pandas normalisiert wurde, um die Überprüfung zu vereinfachen
So importieren Sie CSV- und TSV-Dateien mit Python in SQLite
So erstellen Sie eine Überwachungskamera (Überwachungskamera) mit Opencv und Python
So vermeiden Sie doppelte Daten bei der Eingabe von Python in SQLite.
Vorsichtsmaßnahmen beim Übergeben von def an sortierte und gruppierte Funktionen in Python? ??
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Umgang mit Fehlern bei der Installation von Python und Pip mit Choco
Wirf etwas mit Python in Kinesis und stelle sicher, dass es drin ist
Datenbanktabellen mit CSV extrahieren [ODBC-Verbindung von R und Python]
[Python] Versuchen Sie, Zeichen aus Bildern mit OpenCV und pyocr zu erkennen
Ich habe versucht, mit Python + OpenCV eine Bildähnlichkeitsfunktion zu erstellen
Machen Sie Apache Log CSV mit Python
[Python] Mit Python in eine CSV-Datei schreiben
Ausgabe in eine CSV-Datei mit Python
JSON-Codierung und -Decodierung mit Python
Machen Sie Scrapy exe mit Pyinstaller
Vorsichtsmaßnahmen bei der Verwendung von Phantomjs aus Python
Vorsichtsmaßnahmen bei Verwendung von sechs mit Python 2.5
[TCP / IP] Versuchen Sie nach dem Studium, mit Python einen HTTP-Client zu erstellen
[Data Science-Grundlagen] Ich habe versucht, mit Python von CSV auf MySQL zu speichern
Versuchen Sie, Foldl und Foldr mit Python: Lambda zu machen. Auch Zeitmessung
Verwenden Sie Python aus Java mit Jython. Ich war auch süchtig danach.
Konvertieren Sie eine Tabelle in CSV und laden Sie sie mit Cloud-Funktionen in den Cloud-Speicher hoch
Vorsichtsmaßnahmen und Fehlerbehandlung beim Aufrufen der .NET-DLL aus Python mit Pythonnet
Fehler aufgrund von UnicodeDecodeError beim Lesen der CSV-Datei mit Python [Für Anfänger]
[Zaif] Ich habe versucht, den Handel mit virtuellen Währungen mit Python zu vereinfachen
[Python] Senden Sie das von der Webkamera aufgenommene Bild an den Server und speichern Sie es
Erstellen Sie mit Python einen Entscheidungsbaum von 0 und verstehen Sie ihn (5. Information Entropy)
Von Python bis zur Verwendung von MeCab (und CaboCha)
So konvertieren Sie Python in eine exe-Datei
Konvertieren Sie mit pdfplumber von PDF in CSV