什么不是 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']

因此基本上空行被过滤掉了。