k4m454k
@k4m454k
Sysadmin, QA, DroneGuru

Поиск нужной колонки в csv. Как реализовать алгоритмически?

Добрый день, жители тостера.
По работе пришлось написать не сложный скрипт на python отбора фотографий по геотегу.
Проблема возникла дальше.

Из вводных:
Директория с кучей фотографий.
CSV файл, где несколько колонок, первая - всегда название файла с фото.
И где-то в остальных есть координаты lat и lon (они всегда стоят так парой, сначала lat, потом lon)

И вот, столбцы иногда перепутаны, например в одном CSV
photoname.jpg,lat,lon,,,,
а в другом
photoname.jpg,angleX,angleY,lat,lon,,,

Так вот, есть ли идеи, как на стадии парсинга CSV сделать так, чтоб он сам находил столбцы с координатами?
На выходе хочу получить список типа
[[photoname,lat,lon],[photoname,lat,lon],[photoname,lat,lon],....]

Координаты всегда вида XX.XXXXXX.. (причём количество знаков после точки может меняться, но не менее 6и)
Проблема в том, что в остальных колонках встречаются числа типа "-43.0056"

Наверное можно как-то регулярками сделать, но пока не очень понимаю как... я в них не силён.
  • Вопрос задан
  • 565 просмотров
Решения вопроса 1
@bes_internal
webdev: perl, gentoo, html/css
Вам нужно для каждой строки нужно получить lat,lon через findall() и регексп вида ,(-?\d{1,2}\.\d{6,},-?\d{1,2}\.\d{6,}), (https://regex101.com/r/dUucUj/2) , который полагается только на 2 числа идущие друг за другом и содержащие не меньше 6 символов после запятой.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
sgjurano
@sgjurano
Разработчик
Рекомендую воспользоваться pandas и не изобретать велосипед :)
Если у вас в csv есть заголовки, то он их определит и вы сможете обращаться к данным прямо по имени колонки.

ПС: или модулем csv на худой конец.
Ответ написан
@LODIII
Python/SQL developer
Во многих умных книжках пишут что регулярку нужно делать когда
код уже давно работает, Вы его хотите один раз улучшить-рефакторить и забыть.
И ключевое - этот код никогда больше не будет читать другой программист.
Предлагаю строку когда читаете сразу в stroka1 = str.split(',') то есть в список
а далее смотрите сколько символов после запятой и эти колонки именуете
типа
for st in stroka1:
    arr = st.split('.')
    if len(arr) > 1:
        if len(arr[1]) > 5:
            print('lat or lon')
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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