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