Кто-то мог обеспечить эффективный способ проверить, имеет ли файл формат CSV с помощью Python?
Вам нужно четко обдумать, что вы считаете файлом CSV.
Например, какие символы могут находиться между запятыми. Это только текст? Могут ли это быть и символы Юникода? Должно ли в каждой строке быть одинаковое количество запятых?
Я не знаю строгого определения файла CSV. Обычно это текст ASCII, разделенный запятыми, и каждая строка имеет одинаковое количество запятых и заканчивается терминатором строки вашей платформы.
В любом случае, как только вы ответите на вышеперечисленные вопросы, вы немного продвинетесь на пути к тому, чтобы узнать, как определить, является ли файл файлом CSV.
Попробуйте разобрать его как CSV и посмотрите, не появится ли ошибка.
Вы можете попробовать что-то вроде следующего, но только потому, что вы получили диалект обратно из csv.Sniffer
, действительно недостаточно для гарантии того, что у вас есть действующий CSV-документ.
csv_fileh = open(somefile, 'rb')
try:
dialect = csv.Sniffer().sniff(csv_fileh.read(1024))
# Perform various checks on the dialect (e.g., lineseparator,
# delimiter) to make sure it's sane
# Don't forget to reset the read position back to the start of
# the file before reading any entries.
csv_fileh.seek(0)
except csv.Error:
# File appears not to be in CSV format; move along
В Python есть модуль csv, так что вы можете попробовать разобрать его под разными диалектами.