2015-12-15 63 views
1

我有一个字符串,它有n用逗号分隔的数值。它看起来是这样的 -在X个逗号后分割一个字符串数组

"0,3,03123132,\"2,59\",2015,132213131,\"This, is a message\", 
2015,223123123,\"This, is a message number 2\",2015" 

高达ň值的数量。

我已经使用以下命令来根据逗号分割值,但不能用逗号分隔双引号内的值。

str.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)"); 

它返回这样的事情 -

[0,3,03123132,"2,59",2015,132213131,"This, is a message", 
2015,223123123,"This, is a message number 2",2015]... 

等多达ň

我想拆分此字符串的行和列数将等于数组[1]元素的值。在上面的例子中,它总共有3行。这些行会需要由一组从元素开始3种元素[2]

所以,最终的结果会是这个样子 -

[03123132,"2,59",2015] 
[132213131,"This, is a message",2015] 
[223123123,"This, is a message number 2",2015] 

高达ň的行数。

我做了一些研究如何做到这一点,但它似乎并没有提供一个简单的方法。

任何帮助表示赞赏。

回答

1

你并不需要一个正则表达式来分割数据,该csv.reader将不正是你想要什么:

from csv import reader 

s = "0,3,03123132,\"2,59\",2015,132213131,\"This, is a message\",2015,223123123,\"This, is a message number 2\",2015" 

print(list(reader([s])[0])) 

输出:

['0', '3', '03123132', '2,59', '2015', '132213131', 'This, is a message', 
'2015', '223123123', 'This, is a message number 2', '2015'] 

为了你能zip组,从指数开始2:

it = iter(list(reader([s]))[0][2:]) 

print(list(zip(it,it,it))) 

哪个会给你:

[('03123132', '2,59', '2015'), ('132213131', 'This, is a message', '2015'), ('223123123', 'This, is a message number 2', '2015')] 

或者用itertools.islice避免切片和创建新的列表:

from csv import reader 

from itertools import islice 

it = islice(next(reader([s])), 2, None) 

print(list(zip(it, it, it))) 

的输出结果相同:

[('03123132', '2,59', '2015'), ('132213131', 'This, is a message', '2015'), ('223123123', 'This, is a message number 2', '2015')] 
+0

谢谢您的回复,帕德里克。该列表由11个元素组成,并且忽略列表的前两个元素将为您提供3行,每行3个元素。从元素[2]开始行。对不起,如果我以前不够清楚。 – callMeJava

+0

@callMeJava,是的,我错过了,在这里迟到!无论如何,所有你需要的是csv阅读器和zip –

+0

感谢堆,Padraic。这解决了我的问题! – callMeJava

相关问题