2015-03-18 3 views
0

У меня есть CSV-файл с содержимым в следующем формате:выбора правильной структуры данных для разбора файла

CSE110, Mon, 1:00 PM, Fri, 1:00 PM 
CSE114, Mon, 8:00 AM, Wed, 8:00 AM, Fri, 8:00 AM 

, который в основном конечно имя, сопровождаемое это тайминги.

Какая структура данных лучше всего разбирать и хранить эти данные?

Я попытался с помощью именованных кортежей следующим образом:

CourseTimes = namedtuple('CourseTimes', 'course_name, day, start_time ') 

Но один курс может быть запланировано на несколько дней и времени, как показано на cse114 выше. Это можно решить только во время выполнения. Как справиться с этим?

или еще, могу ли я использовать словарь или список?

Я пытаюсь решить проблему планирования, чтобы назначить TA для курсов. Мне, возможно, придется сравнивать время, чтобы проверить какие-либо столкновения в будущем.

Также, чтобы усложнить ситуацию, входной файл содержит и другие данные, которые мне нужно проанализировать. В основном это формат.

//Course times 
CSE110, Mon, 1:00 PM, Fri, 1:00 PM 
CSE114, Mon, 8:00 AM, Wed, 8:00 AM, Fri, 8:00 AM 
.... 

//Course recitation times 
CSE306, Mon, 2:30 PM 
CSE307, Fri, 4:00 PM 
... 

//class strength 
CSE101, 44, yes 
CSE101, 115, yes 
... 

Мне нужно хранить все это в отдельных структурах данных. Я полагаю. Какими могут быть правильные шаблоны для каждой категории?

+1

Вам необходимо структурировать свои данные в соответствии с тем, что вы собираетесь делать * с ним. –

+1

Правильная структура данных зависит от того, что вы хотите делать с данными. Если вы просто хотите распечатать данные, вам понадобится одна большая строка. Если вам нужно сортировать или считать или делать что-то еще, то эти операции сообщают вам о выборе структуры данных. – unutbu

+1

Почему бы не использовать словарь? – Kasramvd

ответ

2

Начните с отметить несколько вещей, о ваших данных:

  1. У вас есть несколько уникальных строки (курсы)
  2. После каждого курса, есть несколько строк (времена класса встречается в неделю)

При этом у вас есть серия уникальных ключей, каждая из которых имеет несколько значений.

Звучит как dictionary для меня.

Чтобы получить эти данные в словаре, начните с reading the file. Затем вы можете использовать regular expressions, чтобы выбрать каждый раздел [day], [hour]:[minutes] [AM/PM] или обычный старый string.split(), чтобы разбить строку на разделы запятыми. Строка курса - это ключ в словаре с остальной частью строки как кортеж или список значений. Переместитесь на следующую строку.

1
{ 
    'CSE110': {'Mon': ['8: 00 AM'], 'Wed': ['8: 00 AM'], 'Fri': ['8: 00 AM'], 
    'CSE110': {'Mon': ['1: 00 PM'], 'Fri': ['1: 00 PM']} 
} 

Словарь этой формы. Курс может иметь несколько слотов за тот же день.

Когда вы читаете файл csv, который вы создаете для курса и в тот день (если он еще не существует) и назначьте ему список отдельных элементов для синхронизации. Если значение для курса и дня уже присутствует, вы просто добавляете к существующему списку. Это означает, что в тот же день в течение более одного тайминга.

Вам не нужно регулярное выражение, чтобы найти категорию входной строки. Первый и второй типы, которые у вас есть (т.один день и несколько дней) можно найти как

l = line.split(', ') 
try: 
    n = int(l[1]) # n = strength 
except: 
    #continue adding to dictionary since second element in the list is not an integer 
+0

звучит хорошо. Кроме того, что может быть правильным шаблоном reg-ex, чтобы найти такой шаблон? Пожалуйста, проверьте изменения в главном сообщении. Спасибо – raghu

+0

отредактировал это ...... – hyades