我在一个教程中遇到了这段代码:
for row in csv_reader:
if not row:
continue
dataset.append(row)
我的意思是,如果代码遇到的不是行,则跳过并继续。那是对的吗?
什么定义了“不行”?
答案 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']
因此基本上将空行过滤掉了。