0

I came upon this code in a tutorial:

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

Which I take to mean that if the code encounters something other than a row, just skip and continue. Is that correct?

What defines 'not row'?

4

2 回答 2

1

row在这种情况下只是一个变量名。当您这样做时if row,您实际上是在检查 python 认为的变量是否有任何内容True

看看Patrick Haugh 的这个答案Falsy,他在其中重点介绍了 python 中的许多示例。

用一个最小的例子来说明:

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']

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

于 2018-07-23T02:25:29.173 回答
1

这允许您跳过 CSV 文件中的空行。


not row只是意味着“row是假的”。

在 Python 中,以下内容是错误的:

  • False
  • None
  • 数字零
  • 空容器

(当然,您可以编写自己的类,并使用一个__bool__方法来做任何您想做的事情——但按照惯例,它应该遵循相同的规则。)

这在文档中的布尔运算中都有解释。

--

a 迭代的行csv.reader是列表。(而且列表是容器,所以如果它们是空的,它们就是假的。)

空行产生一个空列表;包含文本但没有分隔符的行会生成一个字符串列表;带有分隔符的行会生成两个或多个字符串的列表。

这在csv模块文档中有所介绍……但并非真正集中在一个地方。

于 2018-07-23T02:22:05.003 回答