Я сейчас решаю связанную, но не идентичную проблему.
Мое решение состоит в том, чтобы создать контрольный список той же длины, что и целевые строки CSV, где каждый элемент в контрольном списке является именем метода useMethod. В моем случае useMethod - это виджет редактора; в вашем случае это будет функция, которая определяет, как поле интерпретируется вашим механизмом преобразования текста в речь. Для каждой строки вы можете перебирать поля, вызывая соответствующий виджет обработки.
Итак, для вашего примера "555-555-4321, Боб, Джилл, 3/30/2011",
import csv
def phoneNumber(number):
...
def userName(name):
...
def targetDate(datestring):
...
control = [phoneNumber, userName, userName, targetDate]
with open("csvFile", "r") as inFile:
reader = csv.reader(inFile)
for row in reader:
for op, item in zip(control, row):
op(item)
Я отмечаю, что это работает только в том случае, если файл CSV имеет постоянную интерпретацию для каждого элемента, но если он имеет интерпретацию вариантов, тогда файл CSV является неправильным методом хранения. Я также отмечаю, что вам понадобится какой-то другой объект управления для генерации остальной части предложения; это оставлено в качестве упражнения для читателя. :)
Это позволяет вам иметь библиотеку функций интерпретатора, которые могут быть назначены полям в CSV-файле простым изменением управляющей строки. Новая управляющая строка будет вызывать другой порядок интерпретации полей без необходимости изменять исходный код, и новая строка может быть введена в командной строке, сохранена в первой строке файла csv или выведена каким-либо другим способом.
edit: И, принимая к сведению ваше приложение об использовании веб-интерфейса для настройки, это будет простой способ предоставить новый контрольный список.