使用 python csv reader 忽略 "blank"(未填充)行

ignore "blank" (unfilled) row with python csv reader

各位。

我找不到忽略 CSV 中 "blank" 行的 pythonic 方法。我使用引号是因为我在谈论看起来像 '','','','','' 的行 这是一个 CSV(空行可以是随机的):

id,name,age
1,alex,22
3,tiff,42
,,
,,
4,john,24

代码如下:

def getDataFromCsv(path):
    dataSet = []
    with open(unicode(path), 'r') as stream:
        reader = csv.reader(stream, delimiter=',')
        reader.next() # ignoring header
        for rowdata in reader:
            # how to check here?
            dataSet.append(rowdata)
    return dataSet

这是我一直在阅读的类似问题,但与此特别不同:

怎么样:

if len(rowdata) > 0:
    dataSet.append(rowdata)

还是我漏掉了你问题的一部分?

您可以使用 any 检查行中是否有任何列包含数据:

for rowdata in reader:
    # how to check here?
    if any(x.strip() for x in rowdata):
        dataSet.append(rowdata)

您可以使用内置函数any:

for rowdata in reader:
    # how to check here?
    if not any(row):
        continue
    dataSet.append(rowdata)
with open(fn, 'r') as csvfile:
    reader = csv.reader(csvfile)
    data = [row for row in reader if any(col for col in row)]
  • 打开 CSV 文件
  • 实例化csv.reader()对象
  • 使用列表理解来:
    • 遍历 CSV 行
    • 迭代行中的列
    • 检查行中的任何列是否有值,如果有,添加到列表中

危险区..也许恢复旧线程..

为什么不使用过滤器?然后我认为大型 csv 文件没有内存问题。

类似于:

for data in filter(any, reader):
    print(data)