CSV文件中没有一行?

时间:2018-07-23 02:15:14

标签: python row load-csv

我在一个教程中遇到了这段代码:

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

我的意思是,如果代码遇到的不是行,则跳过并继续。那是对的吗?

什么定义了“不行”?

2 个答案:

答案 0 :(得分:1)

这使您可以跳过CSV文件中的空行。


not row仅表示“ row是虚假的”。

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

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

(当然,您可以使用__bool__方法编写自己的类,该方法可以执行您想要执行的任何操作,但按照惯例,它应遵循相同的规则。)

在文档Boolean operations中对此进行了全部解释。

-

csv.reader迭代的行是列表。 (而且列表是容器,因此如果它们为空,则它们是错误的。)

空行产生一个空列表;一行带有文本但没有定界符的行产生一个字符串列表;带有定界符的行将产生两个或更多字符串的列表。

csv模块文档中对此进行了介绍……但并非一处都包含

答案 1 :(得分:1)

在这种情况下,

row只是一个变量名。当您执行if row时,实际上是在检查python是否认为True的变量是否有任何内容。

请看Patrick Haugh的this answer,其中重点介绍了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']

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