2010-09-26 2 views
4

Задача: Обработать 3 текстовых файла размером около 1 ГБ и превратить их в файлы csv. Исходные файлы имеют настраиваемую структуру, поэтому регулярные выражения будут полезны.Как вы обрабатываете 1GB текстовых данных?

Задача: Нет проблем. Я использую php для него, и все в порядке. Мне не нужно обрабатывать файлы быстрее. Мне просто любопытно, как вы подходите к проблеме в целом. В конце я хотел бы видеть простые и удобные решения, которые могли бы работать быстрее, чем php.

@felix Я уверен в этом. :) Если я закончил весь проект, я, вероятно, опубликую это как код для ping pong.

@mark В настоящее время мой подход работает, за исключением того, что я кэширую несколько сотен строк, чтобы сохранить запись файлов на низком уровне. Хорошо продуманная торговля памятью, вероятно, выдержит некоторое время. Но я уверен, что другие подходы могут сильно побить php, как полное использование набора инструментов * nix.

+4

И я хотел бы увидеть ваше PHP-решение. –

+0

Почему вы не показываете образец ожидаемого ввода и вывода? – tszming

ответ

6

Во-первых, на самом деле это не имеет большого значения, какой язык вы используете для этого, поскольку он, вероятно, будет связан с I/O. Важнее то, что вы используете эффективный подход/алгоритм. В частности, вы хотите избежать чтения всего файла в память, если это возможно, и избегать объединения результата в огромную строку перед записью на диск.

Вместо этого используйте потоковый подход: прочитайте строку ввода, обработайте ее, а затем напишите строку вывода.

0

Perl - старый грандиозный мастер обработки текста, по уважительным причинам. Множество преимуществ Perl, которые, как мне кажется, найдены в Python сегодня, но более доступным способом, поэтому, когда дело доходит до разбора текста, я обычно запускаю Python (ранее я разбирал файлы GB с Python).

AWK или sed, вероятно, также молниеносно, но не так легко расширяется, как Perl och Python. В вашем конкретном случае вы не хотите делать гораздо больше, чем просто анализировать и форматировать вывод, но если вы хотите сделать больше, было бы проще уже использовать Perl/Python.

Я не могу найти аргументы против Python против чего-то другого, поэтому я думаю, это было бы моим предложением.

1

Как обработать большое количество текстовых данных, которые вы задаете? perl -p 's/regex/magic/eg' (или некоторые аналогичные/более сложные варианты).

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

Это широко доступный, быстрый и лаконичный. Я участвую в обучении perl нескольким сотрудникам, и они, похоже, пребывают в постоянном благоговении относительно кажущихся чудесными умениями, которые он может выполнять в одной или двух строках кода. И, шутя в сторону, вполне можно сделать это, оставаясь вполне читаемым (если у вас есть разумное понимание языка и нет желания создавать ад для будущих сопровождающих).

Смежные вопросы