Что не является строкой в 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']
и, таким образом, в основном пустая строка отфильтровывается.