Ich habe ein Skript in Python erstellt, um eine Textdatei für JSON zu konvertieren (für das vscode-Benutzer-Snippet).

Einführung

Ich studiere derzeit Webproduktion, aber bei der Registrierung eines Benutzerausschnitts bei VS Code war es schwierig, am Anfang und am Ende jeder Zeile doppelte Anführungszeichen einzufügen. Ich habe mein eigenes Python-Skript erstellt, das den Inhalt der Datei in ein Formular konvertiert, das mit JSON einfach zu verwenden ist. (Der Grund, warum es Web ist, aber kein JavaScript, ist, dass ich noch nicht daran gewöhnt bin. Schweiß)

Quellcode

conv steht für Konvertierung

json_conv.py


'''
Ein Skript, das den Text in der Zieldatei so konvertiert, dass er als JSON-Wert verwendet werden kann.
(i)Alle"""Hinter"\\", Und
(ii)Registerkartensymbol für alle Registerkarteneingaben(\\t)Ersetzen mit
(iii)3 Tabulatoren am Anfang jeder Zeile und """, Am Ende der Zeile"",", Und
(iv)Ganz am Ende des Dokuments""Hinzugefügt.

Erste Argumentdatei(input_file)Wird basierend auf konvertiert und das Ergebnis ist die Datei des zweiten Arguments(output_file)Schreiben Sie an.
(output_Wenn keine Datei angegeben ist, geben Sie ein_Datei so wie sie ist überschreiben)

Sie können auch eine Funktion mit demselben Namen wie ein Modul importieren.

(Wie schreibe ich einen Befehl)
> python -m json_conv.py (input_file) (output_file(Irgendein))

'''


def json_conv(input_file, output_file=None, n_tab=3):
    '''
Eine Funktion, die den Text in der Zieldatei so konvertiert, dass er als JSON-Wert verwendet werden kann.
    (i)Alle"""Hinter"\\", Und
    (ii)Registerkartensymbol für alle Registerkarteneingaben(\\t)Ersetzen mit
    (iii)Am Anfang jeder Zeile(n_tab)Tab-Eingabe und """, Am Ende der Zeile"",", Und
    (iv)Ganz am Ende des Dokuments""Hinzugefügt.

Anzahl der Tabulator-Eingaben, die am Zeilenanfang eingefügt werden sollen(n_tab)Der Standardwert für ist 3.

    input_Aus Datei konvertieren und Ergebnis ausgeben_In Datei schreiben.
    (output_Wenn keine Datei angegeben ist, geben Sie ein_Datei so wie sie ist überschreiben)
    '''

    # output_Wenn keine Datei angegeben ist, geben Sie ein_Legen Sie die Datei als Ausgabeziel fest
    if output_file is None:
        output_file = input_file

    with open(input_file, mode="r", encoding="utf-8") as file:
        processed_txt = ""  #Definieren Sie eine Zeichenfolge für die Ausgabe

        for line in file:
            replaced_line = line.replace('\"', '\\\"')            #"" Im Dokument"""\"Ersetzt mit
            replaced_line = replaced_line.replace("\t", "\\t")    #Tab-Eingabe-Tab-Symbol(\t)Ersetzen mit
            replaced_line = replaced_line.replace('\n', '\",\n')  #Kurz vor dem Zeilenumbruch(=Ende der Linie)Zu "",Einfügen
            processed_line = '\t' * n_tab + '\"' + replaced_line  #Am Anfang der Zeile(n_tab)Tabs und ""Einfügen (n im Argument)_Wenn keine Registerkarte angegeben ist, werden 3 Registerkarten eingefügt.
            processed_txt += processed_line                       #Fügen Sie der Ausgabezeichenfolge verarbeitete Zeilen hinzu
        
        processed_txt += "\""                                     #Das Ende des Dokuments(=\Zeilenende ohne n)Zu """Hinzufügen

    print("\n Ziel speichern: " + output_file + "\n")
    print("Konvertiertes Dokument")
    print("-----------------------------------------\n")
    print(processed_txt)
    print("\n-----------------------------------------\n")

    while True:
        #Sie werden gefragt, ob Sie wirklich in die angegebene Datei schreiben möchten
        answer = input("Möchten Sie es wirklich in der angegebenen Datei speichern? (Wenn es bereits existiert, wird es überschrieben)(y/n) ")

        #Wenn y ausgewählt ist, wird ausgegeben_Schreiben Sie das konvertierte Dokument in die in der Datei angegebene Datei(Standardmäßig eingeben_Datei überschreiben)
        if answer == 'y':
            with open(output_file, mode="w", encoding="utf-8") as file:
                file.write(processed_txt)
            break

        #Wenn n ausgewählt ist, beenden Sie das Programm ohne zu schreiben
        if answer == 'n':
            break

        #Wenn Sie etwas anderes eingeben, werden Sie erneut gefragt
        else:
            continue



#Verarbeitung bei Ausführung in der Befehlszeile
if __name__ == "__main__":
    import sys

    try:
        selected_input = sys.argv[1]  #Geben Sie das erste Argument der Befehlszeile als Konvertierungsquelldatei an

    #Löst einen Fehler aus, wenn keine Befehlszeilenargumente übergeben werden
    except IndexError:
        raise TypeError("Keine Eingabedatei angegeben")


    try:
        selected_output = sys.argv[2]     #Geben Sie das zweite Argument der Befehlszeile als Speicherziel der konvertierten Datei an
        json_conv(selected_input, selected_output)   #Funktion zur Konvertierung ausführen

    except IndexError:
        json_conv(selected_input)    #Wenn Sie das zweite Argument nicht angeben, übergeben Sie nur das erste Argument und führen Sie die Funktion aus(Überschreiben Sie die Quelldatei)
  1. Ersetzen Sie alle "" durch ""
  2. Ersetzen Sie alle Laschenrohlinge durch \ t
  3. Fügen Sie 3 Tabulator-Leerzeichen und "" am Anfang jeder Zeile und "" am Ende der Zeile hinzu
  4. Fügen Sie "" `ganz am Ende des Dokuments hinzu

Der Vorgang wird der Reihe nach ausgeführt.

In JSON wurde eine Fehlermeldung angezeigt, wenn aufgrund einer Registerkarte ein Leerzeichen vorhanden war. Daher habe ich die Registerkarte durch "\ t" ersetzt. Der Grund für das Entkommen von "" zuerst ist, dass andernfalls das "", das jede Zeile einschließt, falsch ist.

Um die Anzeige in docstring korrekt zu machen, wenn die Funktion von vscode bewegt wird, wird sie durch Hinzufügen von "" nach "" maskiert.

Ich habe es als Funktion definiert, damit es auch als Modul verwendet werden kann. In der Funktion kann durch Angabe von "n_tab" die Anzahl der am Anfang der Zeile eingefügten Tabulator-Leerzeichen angepasst werden, sie wurde jedoch nicht in der Befehlszeile implementiert ... Wenn Sie Lust dazu haben, können Sie es eines Tages möglicherweise auch in der Befehlszeile anpassen.

Ich habe es tatsächlich benutzt

Ausführungsumgebung

Ich verwende Anaconda Power Shell als Terminal für Visual Studio Code und führe es in der Basisumgebung von Anaconda aus. (Auch wenn Sie Visual Studio Code oder Anaconda nicht verwenden, funktioniert es wahrscheinlich, wenn Sie Python für eine Shell wie eine Eingabeaufforderung oder eine Windows Power Shell verwenden können.)

Vorbereitung

Platzieren Sie json_conv.py in einem Verzeichnis im Modulpfad, damit es als Modul importiert werden kann.

Wenn Sie nicht wissen, wie Sie den Pass weitergeben sollen, ist der folgende Artikel hilfreich. So legen Sie Umgebungsvariablen wie Temp und Path in Windows 10 fest|Bedienung|Professioneller Ingenieur [Python-Umgebungskonstruktion] Erklärung der Umgebungsvariablen! | WEBCAMP NAVI

Ich erstelle ein Verzeichnis, um meine eigenen Skripte zusammenzustellen, füge den Pfad des Verzeichnisses für meine eigenen Skripte zu PYTHONPATH hinzu und verwende ihn.

Trainieren

Angenommen, Sie schreiben diesen Code.

test.html


<ul class="_list">
	<li class="_listItem">
		<div class="_listWrapper">
			<img class="_listImg" src="" alt="">
			<div class="_listContent">
				
			</div>
		</div>
	</li>
</ul>

Öffnen Sie eine Shell, wechseln Sie mit dem Befehl cd in das Verzeichnis mit test.html und führen Sie den folgenden Befehl aus: (Python -m ist ein Befehl zum Ausführen eines Python-Moduls als Skript. Beachten Sie, dass auf json_conv nicht .py folgt, da es sich um einen Modulnamen handelt.)

python -m json_conv test.html

Anschließend wird der folgende Bildschirm in der Shell angezeigt.

Ziel: test.html

Konvertiertes Dokument
-----------------------------------------

                        "<ul class=\"_list\">",
                        "\t<li class=\"_listItem\">",
                        "\t\t<div class=\"_listWrapper\">",
                        "\t\t\t<img class=\"_listImg\" src=\"\" alt=\"\">", 
                        "\t\t\t<div class=\"_listContent\">",
                        "\t\t\t\t",
                        "\t\t\t</div>",
                        "\t\t</div>",
                        "\t</li>",
                        "</ul>"

-----------------------------------------

Möchten Sie es wirklich in der angegebenen Datei speichern? (Überschrieben, falls vorhanden
Wird sein)(y/n)

Wenn Sie hier n eingeben, wird das Programm beendet, ohne etwas zu tun. Wenn Sie "y" eingeben, wird test.html überschrieben und sieht folgendermaßen aus:

test.html


			"<ul class=\"_list\">",
			"\t<li class=\"_listItem\">",
			"\t\t<div class=\"_listWrapper\">",
			"\t\t\t<img class=\"_listImg\" src=\"\" alt=\"\">",
			"\t\t\t<div class=\"_listContent\">",
			"\t\t\t\t",
			"\t\t\t</div>",
			"\t\t</div>",
			"\t</li>",
			"</ul>"

Wenn Sie auf diese Weise konvertieren, können Sie es als JSON-Wert verwenden, indem Sie es einfach kopieren und einfügen, sodass Sie auf einfache Weise ein VS Code-Benutzer-Snippet erstellen können.

	 "Print to console": {
	 	"prefix": "log",
	 	"body": [
	 		"console.log('$1');",
	 		"$2"
	 	],
	 	"description": "Log output to console"
	 }

Es steht am Anfang von html.json. ↑ Der Hauptteil dieser Vorlage ist der vorherige Wenn Sie es durch den konvertierten Code ersetzen und dann das Präfix und die Beschreibung neu schreiben ...

html.json


	 "list with image": {
	 	"prefix": "listImg",
	 	"body": [
			"<ul class=\"_list\">",
			"\t<li class=\"_listItem\">",
			"\t\t<div class=\"_listWrapper\">",
			"\t\t\t<img class=\"_listImg\" src=\"\" alt=\"\">",
			"\t\t\t<div class=\"_listContent\">",
			"\t\t\t\t",
			"\t\t\t</div>",
			"\t\t</div>",
			"\t</li>",
			"</ul>"	 	],
	 	"description": "a list, each of its row has an image and texts."
	 }

Dies ist abgeschlossen. Auf diese Weise können Sie einfach ein Benutzer-Snippet erstellen, indem Sie einen Befehl ausführen, ohne manuell "" zu schreiben oder zu maskieren.

Wenn Sie ein Benutzer-Snippet erstellen möchten, können Sie es erstellen, indem Sie eine entsprechende Datei erstellen, Code darin schreiben und diesen Befehl ausführen.

Zusammenfassung

Dieses Mal habe ich ein Python-Skript zum Konvertieren des geschriebenen Codes für JSON eingeführt. Ich habe es im Grunde genommen für mich selbst gemacht, also tut es mir leid, wenn etwas schief geht.

Diesmal habe ich es für JSON gemacht,

for line in file:
            replaced_line = line.replace('\"', '\\\"')            #"" Im Dokument"""\"Ersetzt mit
            replaced_line = replaced_line.replace("\t", "\\t")    #Tab-Eingabe-Tab-Symbol(\t)Ersetzen mit
            replaced_line = replaced_line.replace('\n', '\",\n')  #Kurz vor dem Zeilenumbruch(=Ende der Linie)Zu "",Einfügen
            processed_line = '\t' * n_tab + '\"' + replaced_line  #Am Anfang der Zeile(n_tab)Tabs und ""Einfügen (n im Argument)_Wenn keine Registerkarte angegeben ist, werden 3 Registerkarten eingefügt.
            processed_txt += processed_line                       #Fügen Sie der Ausgabezeichenfolge verarbeitete Zeilen hinzu
        
        processed_txt += "\""                                     #Das Ende des Dokuments(=\Zeilenende ohne n)Zu """Hinzufügen

Wenn Sie dies neu schreiben, wodurch der Satz tatsächlich verarbeitet wird, können Sie ihn für andere Konvertierungen verwenden.

Eines Tages werden wir vielleicht eine vielseitigere Version machen.

Recommended Posts

Ich habe ein Skript in Python erstellt, um eine Textdatei für JSON zu konvertieren (für das vscode-Benutzer-Snippet).
[VSCode] Ich habe ein Benutzer-Snippet für Python-Druck-F-String erstellt
Ich habe ein Skript in Python erstellt, um MDD-Dateien in das Scrapbox-Format zu konvertieren
Ich habe ein Skript erstellt, um ein Snippet in README.md einzufügen
Konvertieren Sie eine Excel-Datei für verschiedene Zwecke in Python in Text
Ich habe eine Python-Wörterbuchdatei für Neocomplete erstellt
So erstellen Sie eine JSON-Datei in Python
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Analysieren Sie eine JSON-Zeichenfolge, die in eine Datei in Python geschrieben wurde
Ein Memorandum zum Ausführen eines Python-Skripts in einer Bat-Datei
Ich möchte eine Datei mit Python zufällig testen
Ich habe einen Python-Text gemacht
Python-Skript, das eine JSON-Datei aus einer CSV-Datei erstellt
Ich habe ein Skript erstellt, um zu überprüfen, ob an der angegebenen Position der JSON-Datei in Python Englisch eingegeben wird.
Ich habe versucht, eine Python-Datei in eine EXE-Datei zu verwandeln (Rekursionsfehler unterstützt)
Python> Ich habe einen Testcode für meine eigene externe Datei erstellt
Ich habe eine Funktion zum Laden des Git-Erweiterungsskripts in Python geschrieben
Ich habe ein Skript geschrieben, um Webseiten-Links in Python zu extrahieren
Ich habe ein Pay-Management-Programm in Python erstellt!
Konvertieren Sie die psd-Datei in Python in png
Ich habe ein Skript erstellt, um Piktogramme anzuzeigen
Ich habe mit Python eine Einstellungsdatei erstellt
Ich habe einen Docker-Container erstellt, um JUMAN ++, KNP, Python (für pyKNP) zu verwenden.
Ich habe einen Code geschrieben, um die Quaternion mit Python in einen Ölerwinkel vom Typ z-y-x umzuwandeln
Erstellen Sie Verknüpfungen, um Python-Dateien auf dem Terminal mit VScode auszuführen
Ich habe eine Webanwendung in Python erstellt, die Markdown in HTML konvertiert
Ich habe ein CLI-Tool erstellt, um Bilder in jedem Verzeichnis in PDF zu konvertieren
Ich möchte eine in Python in PDF konvertierte Tabelle wieder in CSV konvertieren
Ich habe versucht, einen Formatierer zu entwickeln, der Python-Protokolle in JSON ausgibt
Ich möchte mit Python ein Fenster erstellen
Ich möchte mit Python in eine Datei schreiben
Ich habe ein Caesar-Kryptografieprogramm in Python erstellt.
Die Geschichte, wenn ein Python-Benutzer eine JSON-Datei übergibt
Ich habe versucht, eine Klasse zu erstellen, mit der Json in Python problemlos serialisiert werden kann
Ich habe ein Modul in C-Sprache erstellt, das von Python geladene Bilder filtert
Ich habe ein Tool zum Generieren von Markdown aus der exportierten Scrapbox-JSON-Datei erstellt
Ich suchte nach den Fähigkeiten, die erforderlich sind, um Webingenieur bei Python zu werden
Ich habe ein Skript erstellt, das das aktive Fenster mit win32gui von Python aufzeichnet
So konvertieren / wiederherstellen Sie einen String mit [] in Python
Ich möchte eine Variable in einen Python-String einbetten
Ich möchte Timeout einfach in Python implementieren
Lassen Sie uns Chat-Benutzerverwaltungstool gemacht
Konvertieren Sie eine Textdatei mit hexadezimalen Werten in eine Binärdatei
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Ich habe eine VM erstellt, auf der OpenCV für Python ausgeführt wird
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
Ich habe ein Python-Modul erstellt, um Kommentare zu übersetzen
Ich habe einen Code erstellt, um illustration2vec in ein Keras-Modell zu konvertieren
So konvertieren Sie eine JSON-Datei mit Python Pandas in eine CSV-Datei
Ich möchte mit einem Roboter in Python arbeiten.
[Python] Ich habe einen Klassifikator für Iris erstellt [Maschinelles Lernen]
Konvertieren / Zurückgeben von Klassenobjekten in das JSON-Format in Python
[Python] Erstellt eine Methode zum Konvertieren von Radix in 1 Sekunde
Ich habe eine Python-Bibliothek erstellt, die einen rollierenden Rang hat
Ich war nüchtern süchtig danach, awscli von einem in crontab registrierten Python 2.7-Skript aus aufzurufen
Ich habe ein Programm erstellt, um Bilder mit Python und OpenCV in ASCII-Grafik umzuwandeln
Ich kann nicht schlafen, bis ich einen Server erstellt habe !! (Einführung in den Python-Server an einem Tag)
Dem Schlüssel F12 wurde ein Gerüstmakro in einer Python-Skriptdatei zugewiesen