Das manuelle Erstellen einer CSV-Containerklasse ist mühsam Erstellen Sie eine C # -Containerklasse, indem Sie den CSV-Typ usw. automatisch analysieren. Ich habe versucht, einen Generator zu erstellen. Bitte beachten Sie, dass es einfache Regeln für das CSV-Format gibt.
Python fängt übrigens gerade erst an zu lernen Möglicherweise stimmt etwas mit dem Code nicht. In diesem Fall wäre es sehr hilfreich, wenn Sie darauf hinweisen könnten.
Ich fühle mich so.
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,
Die oberste Zeile ist der Name des Schlüssels. Dies ist der Variablenname. Geben Sie danach den Inhalt der CSV-Daten in die zweite Zeile ein.
CSVContainerTestCsv.cs
using System.Collections;
using System.Collections.Generic;
namespace CSVContainer
{
//Echte Containerdaten
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;}
}
}
Ich fühle mich so. Da es auf verschiedene Weise praktisch ist, ist es von einem Namespace umgeben.
Der Klassenname ist ein Kamelfall des CSV-Dateinamens. Der CS-Name lautet "CSVContainer" + Klassenname.
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//Echte Containerdaten\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)
Derzeit gehe ich zur CSV im CSV-Verzeichnis. Das Ausgabeziel befindet sich in derselben Ebene wie der Py-Code. Ich hoffe, Sie können mit diesem Bereich herumspielen. Um ehrlich zu sein, ist es faul, das Verzeichnis zu einem direkten Wert zu machen.
das ist alles