Python - разбиение множества небольших текстовых файлов на структуру данных для подачи в mysql - PullRequest
2 голосов
/ 06 февраля 2012

У меня есть несколько сотен тысяч текстовых файлов, которые имеют довольно стандартную форму (все они имеют общие элементы - ID, Дата, Кому, От, Тема, Тело.

Они не в структурированном формате, напримерсоставное электронное сообщение.

Я хочу разделить их на составные части и передать всю партию в БД. Их много, поэтому я хотел убедиться, что подход будет работать.

Есть ряд ключевых вопросов, над которыми я размышляю (и я не программист - это хобби / обучение).

1) есть тип данных структуры, который я могу привести, чтобы сохранить биты вместеразумным способом.Я подумал, что было бы логично иметь сделку с триплетами file.ID, file.Date и т. Д., Которая хранит весь файл в структурированном виде, чтобы впоследствии его можно было вставить в базу данных.Это питония?или похмелье от моей работы с Matlab?

2) раздел тела может быть размером в несколько килобайт или одним датчиком.(1) это лучше как блоб - я бы потерял поиск - вроде бы смысл этого делать ... (2) Как убедиться, что я могу создать достаточно большое поле в моей базе данных MYSQL, когда пришло время?Я не буду знать, какой самый длинный размер каждого элемента, если я не запустил какой-либо счетчик в разделителе сообщений, который обрабатывает максимальное значение, видимое для сообщения

3) Я полагаю, что я бы начал сходить, получить список файлов с прогулки, затем потяните каждый файл, строка за строкой.Я буду использовать положение линии, чтобы вывести некоторые известные местоположения (ID, Дата), а затем некоторые RegEx или шаблоны, основанные на функциях, чтобы разделить остальные.Как только я разделю файлы, я планирую их проглотить.Тем не менее, мне интересно, было бы логичнее подключаться к БД в конце каждого сообщения и записывать части в отдельную запись по одной.

Время - не драма, оно может длиться целую неделю, несмотря ни на что.У меня на i7 около 8 Гб оперативной памяти, поэтому я опять не особо нуждаюсь в ресурсах, и с удовольствием позволю себе это сделать.

Звучит логично?Я пропустил основной шаг?

Спасибо.

1 Ответ

1 голос
/ 06 февраля 2012

Объявление 1)

Я думаю, что наиболее «питоническим» способом хранения этих структурированных данных было бы использование dict.Другим решением было бы объявить class, но поскольку вы не планируете выполнять дальнейшую обработку (т. Е. Вам не понадобятся какие-либо методы для вашего типа данных), вам следует придерживаться максимально простого решения (imo).

Просто используйте

data = {}
# Parse file
data['id'] = id_value;
data['date'] = date_value;
# ... and so on

Для хранения данных из каждого файла в data.

Ad 2)

На стороне Python вы можетепросто используйте строки (например, str или unicode, если вы используете <3.0).Строки в python не имеют ограничения по размеру (кроме вашего предела архитектуры, но на 64-битной машине это не проблема). </p>

На MySQL-стороне я бы использовал TEXT в качестветип данных для раздела тела.Вы также можете использовать VARCHAR, но вам необходимо указать максимальную длину.

Ad 3)

Я бы порекомендовал обрабатывать каждый файл независимо, то есть анализировать его и записывать вБД сразу после этого.Имо нет никаких причин не делать этого.Нет необходимости заполнять память всеми данными (или рискнуть сбой перед тем, как последний файл будет прочитан без записи в базу данных).Я бы, вероятно, использовал какой-нибудь механизм для пометки обработанных файлов (переместить их в другое дерево, переименовать их): если по какой-то причине мне потребуется перезапустить программу, это помешает обработать один и тот же файл дважды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...