J'ai créé un script en Python pour convertir un fichier texte pour JSON (pour l'extrait d'utilisateur vscode)

introduction

J'étudie actuellement la production Web, mais lors de l'enregistrement d'un extrait d'utilisateur avec VS Code, il était difficile d'ajouter des guillemets doubles au début et à la fin de chaque ligne. J'ai créé mon propre script python qui convertit le contenu du fichier dans une forme facile à utiliser avec JSON. (La raison pour laquelle c'est Web mais pas JavaScript, c'est que je n'y suis pas encore habitué)

Code source

conv signifie conversion

json_conv.py


'''
Un script qui convertit le texte du fichier cible afin qu'il puisse être utilisé comme valeur JSON.
(i)Tous"""Derrière"\\", Et
(ii)Symbole de tabulation pour toutes les entrées de tabulation(\\t)Remplacer par
(iii)3 onglets au début de chaque ligne et """, À la fin de la ligne"",", Et
(iv)À la toute fin du document""Est ajouté.

Premier fichier d'arguments(input_file)Est converti en fonction de, et le résultat est le fichier du deuxième argument(output_file)Écrire à.
(output_Si le fichier n'est pas spécifié, saisissez_Écraser le fichier tel quel)

Vous pouvez également importer une fonction portant le même nom qu'un module.

(Comment écrire une commande)
> python -m json_conv.py (input_file) (output_file(Tout))

'''


def json_conv(input_file, output_file=None, n_tab=3):
    '''
Une fonction qui convertit le texte dans le fichier cible afin qu'il puisse être utilisé comme valeur JSON.
    (i)Tous"""Derrière"\\", Et
    (ii)Symbole de tabulation pour toutes les entrées de tabulation(\\t)Remplacer par
    (iii)Au début de chaque ligne(n_tab)Tabulation et """, À la fin de la ligne"",", Et
    (iv)À la toute fin du document""Est ajouté.

Nombre d'entrées de tabulation à insérer au début d'une ligne(n_tab)La valeur par défaut pour est 3.

    input_Convertir à partir du fichier et afficher le résultat_Écrire dans un fichier.
    (output_Si le fichier n'est pas spécifié, saisissez_Écraser le fichier tel quel)
    '''

    # output_Si le fichier n'est pas spécifié, saisissez_Définir le fichier comme destination de sortie
    if output_file is None:
        output_file = input_file

    with open(input_file, mode="r", encoding="utf-8") as file:
        processed_txt = ""  #Définir une chaîne pour la sortie

        for line in file:
            replaced_line = line.replace('\"', '\\\"')            #"" Dans le document"""\"Remplacé par
            replaced_line = replaced_line.replace("\t", "\\t")    #Symbole d'onglet d'entrée d'onglet(\t)Remplacer par
            replaced_line = replaced_line.replace('\n', '\",\n')  #Juste avant le saut de ligne(=Fin de ligne)À "",Insérer
            processed_line = '\t' * n_tab + '\"' + replaced_line  #Au début de la ligne(n_tab)Onglets et ""Insérer (n dans l'argument)_Si l'onglet n'est pas spécifié, 3 onglets seront insérés)
            processed_txt += processed_line                       #Ajouter des lignes traitées à la chaîne de sortie
        
        processed_txt += "\""                                     #La toute fin du document(=\Fin de ligne sans n)À """Ajouter

    print("\n Enregistrer la destination: " + output_file + "\n")
    print("Document converti")
    print("-----------------------------------------\n")
    print(processed_txt)
    print("\n-----------------------------------------\n")

    while True:
        #Il vous sera demandé si vous voulez vraiment écrire dans le fichier spécifié
        answer = input("Voulez-vous vraiment l'enregistrer dans le fichier spécifié? (S'il existe déjà, il sera écrasé)(y/n) ")

        #Si y est sélectionné, la sortie_Ecrire le document converti dans le fichier spécifié dans le fichier(Entrée par défaut_Écraser le fichier)
        if answer == 'y':
            with open(output_file, mode="w", encoding="utf-8") as file:
                file.write(processed_txt)
            break

        #Si n est sélectionné, quitter sans écrire
        if answer == 'n':
            break

        #Si vous entrez autre chose, vous serez à nouveau invité
        else:
            continue



#Traitement lors de l'exécution sur la ligne de commande
if __name__ == "__main__":
    import sys

    try:
        selected_input = sys.argv[1]  #Spécifiez le premier argument de la ligne de commande comme fichier source de conversion

    #Génère une erreur si aucun argument de ligne de commande n'est passé
    except IndexError:
        raise TypeError("Aucun fichier d'entrée spécifié")


    try:
        selected_output = sys.argv[2]     #Spécifiez le deuxième argument de la ligne de commande comme destination d'enregistrement du fichier converti
        json_conv(selected_input, selected_output)   #Exécuter la fonction de conversion

    except IndexError:
        json_conv(selected_input)    #Si vous ne spécifiez pas le deuxième argument, transmettez uniquement le premier argument et exécutez la fonction(Écraser le fichier source)
  1. Remplacez tout "" par "" "
  2. Remplacez tous les onglets vides par «\ t»
  3. Ajoutez 3 tabulations et «» «au début de chaque ligne et», «à la fin de la ligne
  4. Ajoutez «» à la toute fin du document

Le processus est exécuté dans l'ordre.

Dans JSON, j'ai eu une erreur s'il y avait un espace dû à un onglet, j'ai donc remplacé l'onglet par \ t. La raison pour laquelle vous échappez d'abord à "" "est qu'autrement, le" "" entourant chaque ligne sera incorrect.

De plus, dans docstring, afin de corriger l'affichage lorsque la fonction est survolée par vscode, elle est échappée en ajoutant \ après \.

Je l'ai défini comme une fonction afin qu'il puisse également être utilisé comme module. Dans la fonction, en spécifiant n_tab, le nombre de blancs de tabulation insérés au début de la ligne peut être ajusté, mais il n'a pas été implémenté sur la ligne de commande ... Un jour, si vous en avez envie, vous pourrez peut-être l'ajuster également sur la ligne de commande.

Je l'ai utilisé

Environnement d'exécution

J'utilise Anaconda Power Shell comme terminal pour Visual Studio Code et je l'exécute dans l'environnement de base d'Anaconda. (Même si vous n'utilisez pas Visual Studio Code ou Anaconda, si vous pouvez utiliser python sur un shell tel qu'une invite de commande ou Windows Power Shell, cela fonctionnera probablement.)

Préparation

Placez json_conv.py dans un répertoire qui se trouve dans le chemin du module afin qu'il puisse être importé en tant que module.

Si vous ne savez pas comment passer le pass, l'article suivant vous sera utile. Comment définir des variables d'environnement telles que la température et le chemin dans Windows 10|un service|Ingénieur professionnel [Construction de l'environnement Python] Explication des variables d'environnement! | WEBCAMP NAVI

Je crée un répertoire pour rassembler mes propres scripts, et j'ajoute le chemin du répertoire de mes propres scripts à PYTHONPATH et je l'utilise.

Entraine toi

Par exemple, supposons que vous écriviez ce code.

test.html


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

Ouvrez un shell, utilisez la commande cd pour accéder au répertoire contenant test.html, puis exécutez la commande suivante: (Python -m est une commande pour exécuter un module Python en tant que script. Notez que json_conv n'est pas suivi de .py car il s'agit d'un nom de module.)

python -m json_conv test.html

Ensuite, l'écran suivant sera affiché dans le shell.

Destination: test.html

Document converti
-----------------------------------------

                        "<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>"

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

Voulez-vous vraiment l'enregistrer dans le fichier spécifié? (Écrasé s'il existe déjà
Sera)(y/n)

Si vous entrez «n» ici, le programme se terminera sans rien faire. Si vous entrez y, test.html sera écrasé et ressemblera à ceci:

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>"

En effectuant une conversion de cette manière, vous pouvez l'utiliser comme valeur JSON simplement en copiant et en collant, de sorte que vous pouvez facilement créer un extrait d'utilisateur VS Code.

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

Il est écrit au début de html.json, ↑ La partie corps de ce modèle est la précédente Si vous le remplacez par le code converti, puis réécrivez le préfixe et la description ...

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."
	 }

C'est tout ce qu'on peut en dire. De cette façon, vous pouvez facilement créer un extrait d'utilisateur en exécutant une commande sans écrire ou échapper manuellement " .

Si vous souhaitez créer un extrait de code utilisateur, vous pouvez le créer en créant un fichier approprié, en y écrivant du code et en exécutant cette commande.

Résumé

Cette fois, j'ai introduit un script python pour convertir le code écrit pour JSON. Je l'ai fait pour moi, donc je suis désolé si quelque chose ne va pas.

Cette fois, je l'ai fait pour JSON,

for line in file:
            replaced_line = line.replace('\"', '\\\"')            #"" Dans le document"""\"Remplacé par
            replaced_line = replaced_line.replace("\t", "\\t")    #Symbole d'onglet d'entrée d'onglet(\t)Remplacer par
            replaced_line = replaced_line.replace('\n', '\",\n')  #Juste avant le saut de ligne(=Fin de ligne)À "",Insérer
            processed_line = '\t' * n_tab + '\"' + replaced_line  #Au début de la ligne(n_tab)Onglets et ""Insérer (n dans l'argument)_Si l'onglet n'est pas spécifié, 3 onglets seront insérés)
            processed_txt += processed_line                       #Ajouter des lignes traitées à la chaîne de sortie
        
        processed_txt += "\""                                     #La toute fin du document(=\Fin de ligne sans n)À """Ajouter

Si vous réécrivez ceci, qui traite en fait la phrase, vous pouvez l'utiliser pour d'autres conversions.

Un jour, nous pourrons créer une version plus polyvalente.

Recommended Posts

J'ai créé un script en Python pour convertir un fichier texte pour JSON (pour l'extrait d'utilisateur vscode)
[VSCode] J'ai créé un extrait d'utilisateur pour Python print f-string
J'ai créé un script en python pour convertir des fichiers .md au format Scrapbox
J'ai fait un script pour mettre un extrait dans README.md
Convertir un fichier Excel en texte en Python à des fins de comparaison
J'ai créé un fichier de dictionnaire python pour Neocomplete
Comment créer un fichier JSON en Python
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
Analyser une chaîne JSON écrite dans un fichier en Python
Un mémorandum pour exécuter un script python dans un fichier bat
Je veux échantillonner au hasard un fichier avec Python
J'ai fait un texte Python
Script Python qui crée un fichier JSON à partir d'un fichier CSV
J'ai créé un script pour vérifier si l'anglais est entré dans la position spécifiée du fichier JSON en Python.
J'ai essayé de transformer un fichier Python en un EXE (erreur de récursivité prise en charge)
Python> J'ai créé un code de test pour mon propre fichier externe
J'ai écrit une fonction pour charger le script d'extension Git en Python
J'ai écrit un script pour extraire les liens de pages Web en Python
J'ai fait un programme de gestion de la paie en Python!
Convertir un fichier psd en png en Python
J'ai fait un script pour afficher des pictogrammes
J'ai créé un fichier de configuration avec Python
J'ai créé un conteneur Docker pour utiliser JUMAN ++, KNP, python (pour pyKNP).
J'ai écrit un code pour convertir quaternion en angle de graissage de type z-y-x avec Python
Créez des raccourcis pour exécuter des fichiers Python sur le terminal avec VScode
J'ai créé une application Web en Python qui convertit Markdown en HTML
J'ai créé un outil CLI pour convertir les images de chaque répertoire en PDF
Je souhaite convertir une table convertie en PDF en Python en CSV
J'ai essayé de développer un formateur qui génère des journaux Python en JSON
Je veux créer une fenêtre avec Python
Je veux écrire dans un fichier avec Python
J'ai créé un programme cryptographique César en Python.
L'histoire lorsqu'un utilisateur Python passe un fichier JSON
J'ai essayé de créer une classe qui peut facilement sérialiser Json en Python
J'ai fait un module en langage C qui filtre les images chargées par Python
J'ai créé un outil pour générer du Markdown à partir du fichier JSON Scrapbox exporté
J'ai recherché les compétences nécessaires pour devenir ingénieur web avec Python
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python
Comment convertir / restaurer une chaîne avec [] en python
Je souhaite intégrer une variable dans une chaîne Python
Je veux facilement implémenter le délai d'expiration en python
Création de l'outil de gestion des utilisateurs Let's Chat
Convertir un fichier texte avec des valeurs hexadécimales en fichier binaire
Je veux écrire en Python! (2) Écrivons un test
J'ai créé une VM qui exécute OpenCV pour Python
J'ai essayé d'implémenter un pseudo pachislot en Python
J'ai créé un module Python pour traduire les commentaires
J'ai créé un code pour convertir illustration2vec en modèle Keras
Comment convertir un fichier JSON en fichier CSV avec Python Pandas
Je veux travailler avec un robot en python.
[Python] J'ai créé un classificateur pour les iris [Machine learning]
Convertir / renvoyer des objets de classe au format JSON en Python
[Python] Création d'une méthode pour convertir la base en 1 seconde
J'ai créé une bibliothèque python qui fait rouler le rang
J'étais sobrement accro à appeler awscli à partir d'un script Python 2.7 enregistré dans crontab
J'ai créé un programme pour convertir des images en art ASCII avec Python et OpenCV
Je ne peux pas dormir tant que je n'ai pas construit un serveur !! (Introduction au serveur Python faite en un jour)
Affectation d'une macro de génération de modèles dans un fichier de script Python à la touche F12