什么不是 csv 文件中的一行?
What is not a row in a csv file?
我在教程中看到这段代码:
for row in csv_reader:
if not row:
continue
dataset.append(row)
我的意思是,如果代码遇到一行以外的内容,请跳过并继续。那是对的吗?
什么定义了 'not row'?
这允许您跳过 CSV 文件中的空行。
not row
只是表示“row
是错误的”。
在Python中,以下内容是错误的:
False
None
- 数字零
- 空容器
(当然,您可以使用 __bool__
方法编写您自己的 class,它可以执行您想要的任何操作 — 但按照惯例,它应该遵循相同的规则。)
这在文档的 Boolean operations 中都有解释。
--
csv.reader
迭代的行是列表。 (列表是容器,所以如果它们是空的,它们就是假的。)
一个空行产生一个空列表;带有文本但没有定界符的行生成一个字符串列表;带分隔符的行生成两个或更多字符串的列表。
csv
模块文档中对此进行了介绍……但并非全部集中在一个地方。
row
在此上下文中只是一个变量名。当您执行 if row
时,您实际上是在检查 python 认为是 True
.
的变量是否有任何内容
看看 Patrick Haugh 的 ,他在其中强调了 python 中 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']
因此基本上空行被过滤掉了。
我在教程中看到这段代码:
for row in csv_reader:
if not row:
continue
dataset.append(row)
我的意思是,如果代码遇到一行以外的内容,请跳过并继续。那是对的吗?
什么定义了 'not row'?
这允许您跳过 CSV 文件中的空行。
not row
只是表示“row
是错误的”。
在Python中,以下内容是错误的:
False
None
- 数字零
- 空容器
(当然,您可以使用 __bool__
方法编写您自己的 class,它可以执行您想要的任何操作 — 但按照惯例,它应该遵循相同的规则。)
这在文档的 Boolean operations 中都有解释。
--
csv.reader
迭代的行是列表。 (列表是容器,所以如果它们是空的,它们就是假的。)
一个空行产生一个空列表;带有文本但没有定界符的行生成一个字符串列表;带分隔符的行生成两个或更多字符串的列表。
csv
模块文档中对此进行了介绍……但并非全部集中在一个地方。
row
在此上下文中只是一个变量名。当您执行 if row
时,您实际上是在检查 python 认为是 True
.
看看 Patrick Haugh 的 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']
因此基本上空行被过滤掉了。