Python3.4 - 通过列枚举csv中的行以获取最大长度

时间:2015-07-11 22:27:47

标签: python python-3.x

我想在制表符分隔的csv文件中找到每列的最大长度。 我可以使用以下命令找到一列的最大值:

import csv
oldlen=0
with open(mfile) as csvfile:
test = csv.reader(csvfile,dialect='excel-tab')
for row in test:
    if len(row[0]) > oldlen:
        newlen = len(row[0])
print (newlen)

如果我希望完成所有列(并计算它们),我可以手动更改row [],但我希望学习,所以我尝试了这个:

with open(mfile) as csvfile:
test = csv.reader(csvfile,dialect='excel-tab')
ncol=len(test[0])
for column in test:
    for row in test:
        if len(row[column]) > oldlen:
            newlen = len(row[0])
    print (column,newlen)

当然,这不会产生程序感。但它表明,我希望,我的意图是什么。我必须先做列,这样才能在所有行中获得每列的最大长度。

2 个答案:

答案 0 :(得分:1)

您可以使用dict存储列号 - >最大长度查找,并通过循环遍历每一行的每一列来为其分配。

lengths = {}
with open(mfile) as csvfile:
    test = csv.reader(csvfile, dialect='excel-tab')
    for row in test:
        for colno, col in enumerate(row):
            lengths[colno] = max(len(col), lengths.get(colno, 0))

列数为len(lengths),每个列的最大长度可以lengths[0]作为第二列的第一列lengths[1]访问...

答案 1 :(得分:0)

您可transpose the rows into columns使用zip()功能:

with open(mfile) as csvfile:
    test = csv.reader(csvfile, dialect='excel-tab')
    columns = list(zip(*test))

然后获取每列的最大值:

for col in columns:
    print(max(col))