我有以下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中的每一行,我想在操作之前检查它是否为完整行。
任何帮助都会受到大力赞赏。
温暖的问候。
答案 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的行。