“忽略”;“空白”;(未填充)带有python csv读取器的行

“忽略”;“空白”;(未填充)带有python csv读取器的行,python,csv,reader,Python,Csv,Reader,大家好 我找不到一个pythonic方法来忽略CSV中的“空白”行。我用引号是因为我说的是看起来像“,”,“,”的线条 以下是CSV(空行可以是随机的): 代码如下: def getDataFromCsv(path): dataSet = [] with open(unicode(path), 'r') as stream: reader = csv.reader(stream, delimiter=',') reader.next() # ign

大家好

我找不到一个pythonic方法来忽略CSV中的“空白”行。我用引号是因为我说的是看起来像“,”,“,”的线条 以下是CSV(空行可以是随机的):

代码如下:

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)
还是我遗漏了你问题的一部分?

那么:

if len(rowdata) > 0:
    dataSet.append(rowdata)
或者我遗漏了您问题的一部分?

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

for rowdata in reader:
    # how to check here?
    if any(x.strip() for x in rowdata):
        dataSet.append(rowdata)
您可以使用检查行中的任何列是否包含数据:

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

您可以使用内置功能:


您可以使用内置功能:

  • 打开CSV文件
  • 实例化csv.reader()对象
  • 使用列表理解:
    • 迭代CSV行
    • 迭代行中的列
    • 检查行中的任何列是否有值,如果有,则添加到列表中
  • 打开CSV文件
  • 实例化csv.reader()对象
  • 使用列表理解:
    • 迭代CSV行
    • 迭代行中的列
    • 检查行中的任何列是否有值,如果有,则添加到列表中

这不起作用,因为这些“空”行仍然有3长。您必须测试行中的3个字符串是否全部为空。这不起作用,因为这些“空”行仍然有3个长。您必须测试行中的3个字符串是否全部为空。您可以使用
如果有(rowdata中的x代表x):dataSet.append(rowdata)
顺便说一句,更改为
next(reader)
以与Python3 alsotogether兼容,并使用Schwobasegl的@dekim解决方案,非常符合预期。Thanks@tonypdmtr好主意,我只在2.7.x中考虑过,但现在我会记住这一点。你可以使用
如果有的话(rowdata中的x代表x):dataSet.append(rowdata)
顺便说一句,改为
next(reader)
与Python3兼容,Schwobasegl的@dekim解决方案也可以正常工作。Thanks@tonypdmtr好主意,我只在2.7.x中思考过,但我现在会记住这一点。正如预期的那样工作,很清楚,它教会了我一些东西。谢谢有用!如果我理解正确,这一行
如果有(x.strip()代表rowdata中的x):
可以理解为:“如果在剥离行中的所有字符串值后仍有任何值,则该行有数据,应添加到数据集”对于那些试图从行中清除空字符串的用户,请使用csv.DictReader:记住指定x是行字典中的值的lsit,即使用此行:
如果有(x.strip()表示列表中的x(row.values()):
@grego“如果在剥离行中的所有字符串值后还有任何值”--这几乎是正确的:1.…任何不是空字符串的剩余值…2.
any
在第一个truthy元素处停止,也就是说,不一定所有元素都被剥离,但只剥离所需的数量。工作正常,很清楚,它教会了我一些东西。谢谢!有用!如果我理解正确,这一行
如果有(x.strip()对于行数据中的x):
可以理解为:“如果在剥离行中的所有字符串值后仍有任何值,则该行有数据,应添加到数据集”对于那些试图从行中清除空字符串的用户,请使用csv.DictReader:记住指定x是行字典中的值的lsit,即使用此行:
如果有(x.strip()表示列表中的x(row.values()):
@grego“如果在剥离行中的所有字符串值后还有任何值”--这几乎是正确的:1…任何不是空字符串的剩余值…2。
any
在第一个truthy元素处停止,即不一定所有元素都被剥离,但只剥离所需的数量。您好,欢迎使用Stack Overflow。当回答一个已经有很多答案的问题时,请确保添加一些额外的细节为什么你提供的回复是实质性的,而不是简单地重复原始海报已经审查过的内容。这在“仅代码”中尤为重要答案如您提供的答案。虽然此代码可能会回答此问题,但提供有关如何和/或为什么解决此问题的其他上下文将提高答案的长期价值。您好,欢迎使用Stack Overflow。当回答一个已经有许多答案的问题时,请确保添加一些额外的洞察,以了解为什么您提供的响应是实质性的,而不是简单地重复原始海报已经审查过的内容。这在“仅代码”中尤为重要答案,如您提供的答案。虽然此代码可以回答问题,但提供有关如何和/或为什么解决问题的其他上下文将提高答案的长期价值。
with open(fn, 'r') as csvfile:
    reader = csv.reader(csvfile)
    data = [row for row in reader if any(col for col in row)]