我有以下 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 文件中。这些文件以一种有趣的方式命名,这导致了代码中的分区和行操作。
这段代码工作正常,但我的问题如下:如何检查 CSV 文件每一行中的列数?一个例子:如果一个输入的 CSV 文件是以下格式,预计有五列:1,2,3,4,5,代码将显示“1”“2”“3”“4”“5”(由制表符分隔)在合并文件中。现在,无论出于何种原因,CSV 文件中的一行条目都类似于:6、7、8。所以它突然停止而没有填充所有列。在这种情况下,我希望代码忽略这一行并且不在合并中产生“6”“7”“8”。
有人可以提供有关如何执行此操作的代码吗?对于输入 CSV 中的每一行,我想在对其进行操作之前检查它是否是整行。
如有任何帮助,我们将不胜感激。
热烈的问候。
最佳答案
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 的行。
关于python - 检查 CSV 每行中的列数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34715410/