Проверьте, имеет ли файл формат CSV с Python - PullRequest
18 голосов
/ 06 июня 2010

Может ли кто-нибудь предоставить эффективный способ проверить, имеет ли файл формат CSV с использованием Python?

Ответы [ 5 ]

26 голосов
/ 06 июня 2010

Вы можете попробовать что-то вроде следующего, но только потому, что вы получаете диалект от 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
0 голосов
/ 07 февраля 2019

Добавление к ответа от 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
0 голосов
/ 06 июня 2010

Попробуйте разобрать его как CSV и посмотреть, если вы получите ошибку.

0 голосов
/ 06 июня 2010

Вам нужно четко подумать о том, что вы считаете файлом CSV.

Например, какие символы могут появляться между запятыми. Это только для текста? Это могут быть и символы Юникода? Должна ли каждая строка иметь одинаковое количество запятых?

Нет строгого определения файла CSV, о котором я знаю. Обычно это текст ASCII, разделенный запятыми, и каждая строка имеет одинаковое количество запятых и оканчивается ограничителем строки вашей платформы.

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

0 голосов
/ 06 июня 2010

Python имеет CSV-модуль , так что вы можете попробовать проанализировать его под различными диалектами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...