检查每行CSV中的列数

时间:2016-01-11 06:30:16

标签: python performance csv export-to-csv

我有以下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和行操作。

此代码工作正常,但我的问题如下:如何检查CSV文件的EACH行中的列数?例如:如果输入CSV文件采用以下格式,预计有五列:1,2,3,4,5,代码将显示“1”“2”“3”“4”“5”(合并文件中的制表符分隔)。现在让我们说无论出于何种原因,CSV文件中的一行条目如下:6,7,8。因此它会在没有填写所有列的情况下突然停止。在这种情况下,我希望代码忽略此行并且不会在合并中生成“6”“7”“8”。

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

任何帮助都会受到大力赞赏。

温暖的问候。

1 个答案:

答案 0 :(得分:2)

QWebEngine

将给出行中的列数。

你可以做到

len(row)

例如,如果您的csv文件看起来像这样

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

运行

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))

忽略长度为2的行。