2016-08-05 89 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(",") 

斯普利特在這些情況創建一個較小的數組:

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

所以,當我把我的功能它不工作和VALUE4被錯誤地關聯到VAR2(應該關聯到VAR4)。

有沒有辦法強制拆分來創建空元素?感謝您的任何提示。

+3

*分割在這些情況造成更小的陣列*真?我得到'['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

只需使用splitlinessplit,它工作正常我係統 或者你可以試試這個

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

會產生這種結果

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

其中foo是foo = "value0,value1,,,value4"

雖然我使用python 3和foo.split(',')也產生所期望的結果