Как я обнаруживаю недостающие поля в файле CSV в Pythonic путь?

При использовании типа возврата IEnumerable можно возвратить Ваш запрос переменная непосредственно.

10
задан bedwyr 14 August 2009 в 16:10
поделиться

5 ответов

if any(row[key] in (None, "") for key in row):
    # raise error

Изменить : Еще лучше:

if any(val in (None, "") for val in row.itervalues()):
    # raise error
18
ответ дан 3 December 2019 в 18:00
поделиться

Поскольку Нет и пустые строки оба оцениваются как False , вам следует принять во внимание следующее:

for row in reader:
    for header in HEADERS:
        if not row[header]:
            # raise error

Обратите внимание, что, в отличие от некоторых других ответов, у вас все равно будет возможность вызвать информативную ошибку, связанную с заголовком.

2
ответ дан 3 December 2019 в 18:00
поделиться

Этот код предоставит для каждой строки список имен полей, которые отсутствуют (или являются пустыми) для этой строки. Затем вы можете указать более подробное исключение, например «Отсутствующие поля: foo, baz».

def missing(row):
    return [h for h in HEADERS if not row.get(h)]

for row in reader:
    m = missing(row)
    if missing:
        # raise exception with list of missing field names
1
ответ дан 3 December 2019 в 18:00
поделиться

Что-то вроде этого?

...
for row in reader:
    for column, value in row.items():
        if value is None or value == "":
            # raise Error, using value of column to say which field is missing

Вы можете использовать 'if not value:' в качестве теста вместо более явного теста, который вы дали.

1
ответ дан 3 December 2019 в 18:00
поделиться

Если вы используете matplotlib.mlab.csv2rec, он уже сохраняет содержимое файла в массив и вызывает ошибку, если одно из значений отсутствует.

>>> from matplotlib.mlab import csv2rec
>>> content_array = csv2rec('file.txt')
IndexError: list index out of range

Проблема в том, что там - это непростой способ настроить это поведение или указать значение по умолчанию в случае отсутствия строк. Более того, сообщение об ошибке не очень объяснительно (может быть полезно опубликовать здесь отчет об ошибке).

ps, поскольку csv2rec сохраняет содержимое файла в виде numpy-записи, будет легче получить значения, равные None.

0
ответ дан 3 December 2019 в 18:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: