当前位置:  开发笔记 > 编程语言 > 正文

使用FasterCSV将不均匀的行转换为列

如何解决《使用FasterCSV将不均匀的行转换为列》经验,为你挑选了1个好方法。

我有一个CSV数据文件,其行可能有500多列,有些列少了很多.我需要转置它,以便每一行成为输出文件中的一列.问题是原始文件中的行可能并非都具有相同的列数,所以当我尝试数组的转置方法时,我得到:

`transpose':元素大小不同(12应该是5)(IndexError)

是否有替代的转置适用于不均匀的阵列长度?



1> bltxd..:

我会插入空值来填充矩阵中的空洞,例如:

a = [[1, 2, 3], [3, 4]]

# This would throw the error you're talking about
# a.transpose

# Largest row
size = a.max { |r1, r2| r1.size <=> r2.size }.size

# Enlarge matrix inserting nils as needed
a.each { |r| r[size - 1] ||= nil }

# So now a == [[1, 2, 3], [3, 4, nil]]
aa = a.transpose

# aa == [[1, 3], [2, 4], [3, nil]]

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有