Вам нужно проанализировать первую строку, создать столбцы и затем перейти к остальным строкам.
Например:
columns = []
with open(file,'rU') as f:
reader = csv.reader(f)
for row in reader:
if columns:
for i, value in enumerate(row):
columns[i].append(value)
else:
# first row
columns = [[value] for value in row]
# you now have a column-major 2D array of your file.
as_dict = {c[0] : c[1:] for c in columns}
print(as_dict)
вывод:
{
' numbers': [' 1', ' 2', ' 3', ' 4'],
' colors ': [' blue', ' red', ' green', ' yellow'],
'strings': ['string1', 'string2', 'string3', 'string4']
}
(некоторые странные пробелы, которые находились в вашем «файле». Удалите пробелы до / после запятых или используйте value.strip()
, если они находятся в вашем реальном вводе.)
Вы могли добавить ссылку на Microsoft Script Control Library (COM) и использовать код как это для оценки выражения. (Также работы для JScript.)
Dim sc As New MSScriptControl.ScriptControl()
sc.Language = "VBScript"
Dim expression As String = "1 + 2 * 7"
Dim result As Double = sc.Eval(expression)
Редактирование - версия C#.
MSScriptControl.ScriptControl sc = new MSScriptControl.ScriptControl();
sc.Language = "VBScript";
string expression = "1 + 2 * 7";
object result = sc.Eval(expression);
MessageBox.Show(result.ToString());
Редактирование - ScriptControl является COM-объектом. В, "Добавляют, ссылочное" диалоговое окно проекта выбирает вкладку "COM" и прокручивает вниз к "Microsoft Script Control 1.0" и выбору хорошо.
Для кого-либо разрабатывающего в C# на Silverlight вот довольно аккуратный прием, что я только что обнаружил, что это позволяет оценку выражения путем обращения к механизму JavaScript:
double result = (double) HtmlPage.Window.Eval("15 + 35");
На самом деле есть своего рода встроенное - можно использовать пространство имен XPath! Хотя это требует переформатирования строки для подтверждения с помощью нотации XPath. Я использовал такой метод для работы с простыми выражениями:
public static double Evaluate(string expression)
{
var xsltExpression =
string.Format("number({0})",
new Regex(@"([\+\-\*])").Replace(expression, " ${1} ")
.Replace("/", " div ")
.Replace("%", " mod "));
return (double)new XPathDocument
(new StringReader("<r/>"))
.CreateNavigator()
.Evaluate(xsltExpression);
}