【问题标题】:Check for number of columns in each row of CSV检查 CSV 每一行中的列数
【发布时间】:2016-04-15 09:36:39
【问题描述】:

我有以下 Python 代码:

import os
import csv
import sys

g = open('Consolidated.csv', "wb")
for root, dirs, files in os.walk('D:\\XXX\\YYY\\S1'):
    for filename in files:
            pathname = os.path.join(root, filename)
            symbol = filename.rpartition('_')[-1].rpartition('.')[0]
            reader = csv.reader(open(pathname, 'rU'))
            writer = csv.writer(g, delimiter='\t', quotechar='"', quoting=csv.QUOTE_ALL)

            for row in reader:
                row.insert(0, symbol.upper())
                if len(row[2]) == 3:
                    row[2] = '0'+row[2]
                writer.writerow(row)

基本思想是我在 S1 中有几个 CSV 文件,我需要将它们合并到一个大的 CSV 文件中。这些文件以一种有趣的方式命名,这导致了代码中的 rpartition 和 row 操作。

此代码运行良好,但我的问题如下:如何检查 CSV 文件每行中的列数?示例:如果输入 CSV 文件采用以下格式,预计有五列:1,2,3,4,5,代码将显示“1”“2”“3”“4”“5”(由制表符分隔)在合并文件中。现在让我们假设 CSV 文件中的一行条目是什么原因:6、7、8。所以它突然停止,没有填写所有列。在这种情况下,我希望代码忽略这一行,而不是在合并中产生“6”“7”“8”。

有人可以提供有关如何执行此操作的代码吗?对于输入 CSV 中的每一行,我想在操作之前检查它是否是一整行。

任何帮助将不胜感激。

热烈的问候。

【问题讨论】:

    标签: python performance csv export-to-csv


    【解决方案1】:
    len(row)
    

    将给出行中的列数。

    你可以的

    for row in reader:
        if not len(row)<desired_number_of_columns:
            # process the row here
    

    例如,如果您的 csv 文件如下所示

    1,2,3,4,5
    a,b,c,d,e
    l1,l2
    d,e,f,g,h
    

    运行

    import csv
    reader = csv.reader(open("csvfile.csv","r"))
    for row in reader:
        if not len(row)<5:
            print(" ".join(row))
    

    将产生输出

    1 2 3 4 5
    a b c d e
    d e f g h
    

    忽略长度为 2 的行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-18
      • 2015-07-09
      相关资源
      最近更新 更多