StrangeAttractor
@StrangeAttractor

Как распарсить CSV-файл с нестандартными разделителями на Python?

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

В общем есть файл-таблица а-ля CSV - текстовый файл, в котором каждая строка - это "запись", по сути перечисление значений свойств объекта. Фишка в том, что разделён файл не запятыми и не табуляциями и не чем-нибудь, а двоеточиями, а внутри поля могут содержать подмассивы, разделённые каким-нибудь другим символом, например палкой '|'.

На C# я бы просто пробежался по строкам файла и воспользовался методом Split, принимающим любой символ в качестве разделителя и возвращающий массив подстрок - результат разбивки исходной строки по этому символу.

А как провернуть такое на Python? Интересны и 2.7 и 3.3. Буду признателен за работающий исходник (а не только указание на нужную функцию, хотя, на худой конец и этого хватит) - в учебных целях мне это поможет. Заранее спасибо.
  • Вопрос задан
  • 7241 просмотр
Пригласить эксперта
Ответы на вопрос 2
@zedxxx
и воспользовался методом Split

Вы не поверите, но и в питоне у строк есть метод split, который выполняет аналогичное действие.
Ответ написан
Комментировать
@radioxoma
Для того, чтобы распарсить CSV-файл с нестандартными разделителями на Python, нужно указать CSV-модулю использовать нестандартные разделители. Освойте этот раздел документации модуля и подстройте под свои нужды.
import csv
with open("filename.csv", 'rb') as f:
    reader = csv.reader(f, delimiter=':')
    for row in reader:
        pass

Вместо pass вставьте ваш обработчик, который будет учитывать дополнительные символы-разделители, например, при помощи функции split:
"Мама|мыла|раму".split('|')
Будьте аккуратны с кодировкой при использовании python 2. Его csv модуль не использует юникод.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы