Может ли кто-нибудь предоставить эффективный способ проверить, имеет ли файл формат CSV с помощью Python?
Проверьте, имеет ли файл формат CSV с Python
Ответ 1
Вы можете попробовать что-то вроде следующего, но только потому, что вы получаете диалект от 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 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
Ответ 2
Python имеет модуль csv, поэтому вы можете попробовать разобрать его под разными диалектами.
Ответ 3
Добавление к ответу gotgenes: я достиг хороших результатов, также проверив наличие непечатаемых символов, которые (tm) не должны быть включены в CSV файлы.
def is_csv(infile):
try:
with open(infile, newline='') as csvfile:
start = csvfile.read(4096)
# isprintable does not allow newlines, printable does not allow umlauts...
if not all([c in string.printable or c.isprintable() for c in start]):
return False
dialect = csv.Sniffer().sniff(start)
return True
except csv.Error:
# Could not get a csv dialect -> probably not a csv.
return False
Ответ 4
Вам нужно четко продумать, что вы считаете CSV файлом.
Например, какие символы могут встречаться между запятыми. Это только текст? Могут ли быть и символы Юникода? Должна ли каждая строка иметь такое же количество запятых?
Нет строгого определения файла CSV, о котором я знаю. Обычно текст ASCII разделяется запятыми, и каждая строка имеет одинаковое количество запятых и заканчивается терминатором линии платформы.
В любом случае, как только вы ответите на вышеуказанные вопросы, вы будете немного дальше на своем пути к пониманию того, как определить, когда файл является CSV файлом.
Ответ 5
Попробуйте разобрать его как CSV и посмотреть, есть ли у вас ошибка.