2016-08-05 2 views
-2

У меня есть строка CSV, как это:Python разделить кратные запятой

foo = "value0,value1,value2,value3,value4".split(",") 
test(foo) 

Я использую раскол разделить эту строку в массив. Тогда У меня есть функция, которая принимает массив и присвоить эти значения для некоторых внутренних переменных:

def test(foo): 
    var0 = foo[0] 
    var1 = foo[1] 
    var2 = foo[2]  
    var3 = foo[3] 
    var4 = foo[4] 
return 

Проблемы заключается в том, что я могу иметь какое-то отсутствующее значение так:

foo = "value0,value1,,,value4".split(",") 

Split в этих ситуациях создает меньший массив:

print(foo) # ['value0','value1','value4'] 

Так что, когда я называю функцию, которую он не работает и value4 неправильно, связанный с var2 (она должна быть связана с Var4).

Есть ли способ заставить split создать пустой элемент? Спасибо за любые советы.

+3

* Split в этих ситуациях создает меньший массив * В самом деле? Я получаю '['value0', 'value1', '', '', 'value4']' если я разделяю '" value0, value1 ,,, value4 "', что я и ожидал – NullUserException

+0

Я использую python 2.7, и я могу их разделить. –

+0

@LingboTang Это работает одинаково независимо от версии python. Я не знаю, что делает OP. – NullUserException

ответ

0

Вам необходимо удалить/очистить пустые строки после разделения строки, и поскольку вы не знаете о длине своих элементов, вы можете использовать словарь, чтобы сохранить ваши строки.

my_vars = {'var{}'.format(i):j for i, j in enumerate(mystr.split(',')) if j} 

Вот демо:

>>> foo = "value0,value1,,,value4" 
>>> my_vars = {'var{}'.format(i):j for i, j in enumerate(foo.split(',')) if j} 
>>> my_vars 
{'var4': 'value4', 'var1': 'value1', 'var0': 'value0'} 

После этого вы можете просто получить доступ к детали с помощью простого индексирования:

>>> my_vars['var1'] 
'value1' 
+0

"* После этого вы можете просто доступ к вашим элементам с ** простым индексированием *** «В отличие от сложной индексации, если вы просто делаете' foo = mystr.split (',') ', а затем используете' foo [i] ' – NullUserException

+0

@NullUserException Мы хотим получить доступ к некоторым предметам с именами! а не только целые индексы. – Kasramvd

+0

Верно, но имена кажутся бесполезными, если вы просто делаете 'var1',' var2, '...' varn'. Могут также использоваться индексы – NullUserException

0

Просто используйте splitlines с split, он работает нормально на моем система или вы можете попробовать это

for lines in foo.splitlines(): 
    print (lines.split(',')) 

будет производить этот результат

['value0', 'value1', '', '', 'value4'] 

где Foo был foo = "value0,value1,,,value4"

хотя я использую Python 3 и foo.split(',') также получение желаемого результата

Смежные вопросы