Что не является строкой в ​​CSV-файле?

Я наткнулся на этот код в учебнике:

 for row in csv_reader:
        if not row:
            continue
        dataset.append(row)

Под этим я понимаю, что если код встречает что-то кроме строки, просто пропустите и продолжайте. Это верно?

Что определяет "не ряд"?

2 ответа

Решение

Это позволяет пропускать пустые строки в файле CSV.


not row просто значит " row это фальси ".

В Python следующие вещи ложны:

  • False
  • None
  • Числовые нули
  • Пустые контейнеры

(Конечно, вы можете написать свой собственный класс с __bool__ метод, который делает все, что вы хотите, но по соглашению он должен следовать тому же правилу.)

Все это объясняется в логических операциях в документации.

-

Строки, повторяемые csv.reader являются списками. (И списки являются контейнерами, поэтому они ложные, если они пустые.)

Пустая строка создает пустой список; строка с текстом без разделителей создает список из одной строки; строка с разделителями создает список из двух или более строк.

Это покрыто в csv модульные документы... но не все в одном месте.

row это просто имя переменной в этом контексте. Когда вы делаете if rowвы фактически проверяете, есть ли какой-либо контент в переменной, которую python считает True,

Взгляните на этот ответ Патрика Хау, в котором он приводит множество примеров того, что Falsy в питоне.

Для иллюстрации в минимальном примере:

import csv
for row in csv.reader(['row1,foo','', 'row3,bar']):
    print(row)

доходность

['row1', 'foo']
[]
['row3', 'bar']

Но если вы делаете

for row in csv.reader(['row1,foo','', 'row3,bar']):
    if row:
        print(row)

Тогда вывод

['row1', 'foo']
['row3', 'bar']

и, таким образом, в основном пустая строка отфильтровывается.

Другие вопросы по тегам