tupoi
@tupoi

Как исправить небольшой фрагмент в txt файле с помощью python?

Доброго времени суток, возникла небольшая проблема. Необходимо получить файл с сайта standards.ieee.org/develop/regauth/oui/oui.txt
скачать файл проблем не возникает, хотелось бы перевести весь этот текст в формат json, нашел скрипт на github'е, но почему-то он работает не корректно, то он записывает в файл следующее
{ "oui": "3C-D9-2B", "vendor": "Hewlett Packard
"},

и из-за того, что кавычка и закрывающая скобка переносится на новую строку, pycharms выдает ошибку, что все неверно и переделывай, а там 13к строчек кода, хотелось бы поправить это программно, но не знаю как в python 3.5 работать с файлами, а именно выполнить эту процедуру, например каждые 2 строки делать backspace. Если кто-нибудь знает, как решить проблему, то не поленитесь, объясните пожалуйста) заранее спасибо
на всякий случай вот код парсера из txt в json
#!/usr/bin/awk -f
# Parse IEEE OUI vendor list to JSON
# http://standards.ieee.org/develop/regauth/oui/oui.txt
# ---
# Usage:
#   $ chmod +x parseoui.awk
#   $ wget http://standards.ieee.org/develop/regauth/oui/oui.txt
#   $ ./parseoui.awk oui.txt > oui.json

BEGIN {
    print "[";
}

/(hex)/ {
    printf "{ \"oui\": \"%s\", \"vendor\": \"%s\"},\n", $1, substr($0, index($0, $3));
}

END {
    print "]";
}


UPD: Необязательно python для исправления, любой другой язык тоже подойдет, главное результат
  • Вопрос задан
  • 3128 просмотров
Решения вопроса 1
urtow
@urtow
*nix, python, QA, bagpipe, folk music
#!/usr/bin/awk -f
# Parse IEEE OUI vendor list to JSON
# http://standards.ieee.org/develop/regauth/oui/oui.txt
# ---
# Usage:
#   $ chmod +x parseoui.awk
#   $ wget http://standards.ieee.org/develop/regauth/oui/oui.txt
#   $ ./parseoui.awk oui.txt > oui.json

BEGIN {
    print "[";
}

/(hex)/ {
    printf "{ \"oui\": \"%s\", \"vendor\": \"%s\"},\n", $1, substr($0, index($0, $3),length($3));
}

END {
    print "]";
}


Вот правильный скрипт. В чем проблема - в том, что у тебя вот тут:
substr($0, index($0, $3))
Извлекалось "от начала третьего элемента и до конца строки", куда попадал символ перевода строки.
Вариант
substr($0, index($0, $3),length($3))
Уже извлечение от начала третьего элемента на длинну третьего элемента, куда не попадает символ перевода строки и все печатается отлично.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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