我有一个很大的csv,其中包含不同长度的逗号分隔行。对另一组数据进行排序我在循环中使用了split(',')
来分隔字段,但此方法要求每行具有相同数量的条目。有没有一种方法,我可以查看一行,而不考虑条目的总数,只提取第N项?作为参考,我使用的方法只适用于看起来像AAA,BBB,CCC,DDD
的行
entry = 'A,B,C,D'
(a,b,c,d) = entry.split(',')
print a,b,c,d
但我想拉出A和C,即使它看起来像A,B,C,D,E,F或A,B,C
发布于 2014-12-23 10:37:49
使用列表而不是单独的变量。
values = entry.split(',')
print values[0], values[2]
发布于 2014-12-23 10:38:08
只需使用列表即可:
xyzzy = entry.split(",");
print xyzzy[0], xyzzy[2]
但请注意,一旦您允许可变元素计数的可能性,您可能最好允许太少:
entry = 'A,B'
xyzzy = entry.split(",");
(a,c) = ('?','?')
if len(xyzzy) > 0: a = xyzzy[0]
if len(xyzzy) > 2: c = xyzzy[2]
print a, c
发布于 2014-12-23 11:06:35
如果您不想索引结果,那么编写自己的函数来处理值太少或两个太多的情况并不困难。虽然它需要更多的代码行来设置,但一个优点是您可以为结果提供有意义的名称,而不是像results[0]
和results[2]
这样的匿名名称。
def splitter(s, take, sep=',', default=None):
r = s.split(sep)
if len(r) < take:
r.extend((default for _ in xrange(take - len(r))))
return r[:take]
entry = 'A,B,C'
a,b,c,d = splitter(entry, 4)
print a,b,c,d # --> A B C None
entry = 'A,B,C,D,E,F'
a,b,c,d = splitter(entry, 4)
print a,b,c,d # --> A B C D
https://stackoverflow.com/questions/27613304
复制相似问题