J'ai essayé de créer un générateur qui génère une classe conteneur C # à partir de CSV avec Python

Créer manuellement une classe de conteneur CSV est un problème Créez une classe de conteneur C # en analysant automatiquement le type CSV, etc. J'ai essayé de créer un générateur. Veuillez noter qu'il existe des règles simples pour le format CSV.

Au fait, Python commence tout juste à étudier Il y a peut-être un problème avec le code. Dans ce cas, il serait très utile que vous puissiez le signaler.

CSV d'origine

Je me sens comme cela.

test_csv.csv


id,key1,key2,key3
1,Test 1,1.0,1,
2,Test 2,2.0,2,
3,Test 3,3.0,3,

La ligne du haut est le nom de la clé. Ce sera le nom de la variable. Après cela, entrez le contenu des données csv de la deuxième ligne.

Générer un résultat

CSVContainerTestCsv.cs


using System.Collections;
using System.Collections.Generic;

namespace CSVContainer
{
	//Données de conteneurs réels
	public class TestCsv
	{
		public int		 id{ get; private set;}
		public string	 key1{ get; private set;}
		public float	 key2{ get; private set;}
		public int		 key3{ get; private set;}
	}

}

Je me sens comme cela. Puisqu'il est pratique de différentes manières, il est entouré d'un espace de noms.

Le nom de la classe est une casse chameau du nom de fichier CSV. Le nom .cs est "CSVContainer" + nom de classe.

Code Python

CSVContainerGenerator.py


# -*- coding: utf-8 -*-

import glob
import os.path

def convert(file):
	count = 0
	culam = ""
	val = ""

	for line in open(file, 'r'):
		if count == 0:
			culam = line
			count += 1
		else:
			val = line
			break

	out_put(file, culam, val)


def out_put(file, culam, val):
	file_name = os.path.basename(file)
	base_name = file_name.replace(".csv","")
	cs_name = "CSVContainer" + to_camel_case(base_name) + ".cs"
	f = create_file(cs_name, base_name)
	create_class(culam, val, f, to_camel_case(base_name))
	# print file_name


def create_file(file, base_name):
	f = open(file, 'w')
	f.write("using System.Collections;\n")
	f.write("using System.Collections.Generic;\n")
	f.write("\n")
	f.write("namespace CSVContainer\n")
	f.write("{\n")
	f.write("\t//Données de conteneurs réels\n")
	f.write("\tpublic class "+to_camel_case(base_name)+"\n")

	return f

def create_class(culam, val, f, base_name):
	f.write("\t{\n")
	culams = culam.split(",")
	vals = val.split(",")
	for i, v in enumerate(culams):
		type_str = ""

		if vals[i].find('.') != -1:
			type_str = "float\t"
		elif vals[i].isdigit():
			type_str = "int\t\t"
		else :
			type_str = "string\t"

		v = v.replace("\n", "")
		v = v.replace("¥n", "")


		f.write("\t\tpublic " + type_str + " " + v + "{ get; private set;}\n")

	f.write("\t}\n")
	f.write("\n")
	f.write("}\n")

def to_camel_case(text):
	text = text.lower()
	text = text.capitalize()

	while '_' in text:
		ix = text.index('_')
		next = text[ix + 1].upper()
		text = text[0:ix] + next + text[ix + 2:]
	return text


for file in glob.glob('CSV/*.csv'):
	print "conv  " , file
	convert(file)

Actuellement, je vais voir le CSV dans le répertoire CSV. La destination de sortie est dans la même couche que le code py. J'espère que vous pourrez jouer avec ce domaine. Pour être honnête, il est paresseux de faire du répertoire une valeur directe.

c'est tout

Recommended Posts

J'ai essayé de créer un générateur qui génère une classe conteneur C # à partir de CSV avec Python
[5e] J'ai essayé de créer un certain outil de type Authenticator avec python
[2nd] J'ai essayé de créer un certain outil de type Authenticator avec python
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai essayé de créer une application de notification de publication à 2 canaux avec Python
J'ai essayé de créer une application todo en utilisant une bouteille avec python
[4th] J'ai essayé de créer un certain outil de type Authenticator avec python
[1er] J'ai essayé de créer un certain outil de type Authenticator avec python
[1 hour challenge] J'ai essayé de créer un site de bonne aventure qui soit trop adapté à Python
Je veux faire un jeu avec Python
Je veux créer du code C ++ à partir de code Python!
J'ai essayé de faire un signal avec Raspeye 4 (édition Python)
J'ai essayé de faire un processus périodique avec CentOS7, Selenium, Python et Chrome
J'ai essayé de créer une classe qui peut facilement sérialiser Json en Python
J'ai essayé de toucher un fichier CSV avec Python
[Python] J'ai essayé de créer une IA Shiritori qui améliore le vocabulaire grâce aux batailles
J'ai essayé de faire une simulation de séparation de source sonore en temps réel avec l'apprentissage automatique Python
[Mac] Je souhaite créer un serveur HTTP simple qui exécute CGI avec Python
mong - J'ai essayé de porter le code qui génère de manière aléatoire le nom du conteneur Docker vers Python -
J'ai essayé de créer diverses "données factices" avec Python faker
J'ai essayé de commencer avec Hy ・ Définir une classe
J'ai fait un chronomètre en utilisant tkinter avec python
J'ai essayé de créer une interface graphique à trois yeux côte à côte avec Python et Tkinter
J'ai créé une fonction pour récupérer les données de la colonne de base de données par colonne en utilisant sql avec sqlite3 de python [sqlite3, sql, pandas]
[Python] J'ai essayé de faire une application qui calcule le salaire en fonction des heures de travail avec tkinter
J'ai créé un serveur avec socket Python et ssl et j'ai essayé d'y accéder depuis le navigateur
J'ai aussi essayé d'imiter la fonction monade et la monade d'état avec le générateur en Python
Je souhaite utiliser un caractère générique que je souhaite décortiquer avec Python remove
J'ai essayé de créer un système qui ne récupère que les tweets supprimés
Rubyist a essayé de créer une API simple avec Python + bouteille + MySQL
J'ai essayé de créer une expression régulière de "montant" en utilisant Python
[Python] J'ai essayé d'implémenter un tri stable, alors notez
J'ai essayé de créer une liste de nombres premiers avec python
J'ai essayé de créer une expression régulière de "date" en utilisant Python
[Introduction] Je veux créer un robot Mastodon avec Python! 【Débutants】
Passer la liste de Python vers C ++ par référence dans pybind11
J'ai essayé de faire une étrange citation pour Jojo avec LSTM
J'ai essayé de créer une fonction de similitude d'image avec Python + OpenCV
J'ai essayé de créer un mécanisme de contrôle exclusif avec Go
[Python] Comment rendre une classe itérable
J'ai essayé un langage fonctionnel avec Python
J'ai créé une API Web
J'ai créé un générateur brouillé qui encode vos phrases préférées de UTF-8 à Shift-JIS (cp932) en Python
[Python] J'ai essayé de créer un programme simple qui fonctionne sur la ligne de commande en utilisant argparse
Une histoire qui n'a pas fonctionné lorsque j'ai essayé de me connecter avec le module de requêtes Python
J'ai essayé de créer un langage original "PPAP Script" qui imagé PPAP (Pen Pineapple Appo Pen) avec Python
J'ai essayé de communiquer avec un serveur distant par communication Socket avec Python.
J'ai essayé de mettre en œuvre une blockchain qui fonctionne réellement avec environ 170 lignes
J'ai essayé de créer un programme qui convertit les nombres hexadécimaux en nombres décimaux avec python
J'ai trouvé un moyen de créer un modèle 3D à partir d'une photo.
J'ai essayé de créer un LINE BOT "Sakurai-san" avec API Gateway + Lambda
J'ai essayé de développer un formateur qui génère des journaux Python en JSON
J'ai essayé d'envoyer un e-mail de fin d'inscription depuis Gmail avec django.
[Outlook] J'ai essayé de créer automatiquement un e-mail de rapport quotidien avec Python