2017-06-30 57 views
0
my_string = "  Name   Last_Name    Place" 
my_string_another = "Aman   Raparia    India" 

我有兩個字符串,我已經在上面提供了,這不是CSV的輸出。目前我在做什麼是我讀的第一串並轉換到一個列表這樣(Python)標識缺少的字符,並用NA代替

my_string = my_string.strip("\r\n") 
my_string = my_string.split(" ") 
my_string[:] = [elem for elem in my_string if elem != ""] 

它提供了

my_string = ['Name', 'Last_Name', 'Place'] 

與之相似的格式輸出我的my_string_another生產做到這一點另一個列表爲

my_another_string = ["Aman", "Raparia", "India"] 

因此,我可以很容易地創建一個字典對象。

my_string_another = "Aman        India" 

當我用我同樣的邏輯到my_string_another轉換到一個列表它產生

my_string_another = ["Aman", "India"] 

這樣當 - :

時my_string_another缺少類似的領域之一,會出現問題我將它們映射在一起,它將映射到姓氏,而不是放置。

有沒有一種方法,我可以得到的格式輸出: -

my_another_string = ["Aman", "NA", "India"] 

所以,當我映射了字符串它們是正確匹配。

回答

1

您可以使用re module

>>> import re 
>>> my_string = "  Name   Last_Name    Place" 
>>> my_string_another = "Aman   Raparia    India" 
>>> re.search('(\S+)\s+(\S*)\s+(\S+)',my_string).groups() 
('Name', 'Last_Name', 'Place') 
>>> re.search('(\S+)\s+(\S*)\s+(\S+)',my_string_another).groups() 
('Aman', 'Raparia', 'India') 
>>> my_string_another = "Aman        India" 
>>> re.search('(\S+)\s+(\S*)\s+(\S+)',my_string_another).groups() 
('Aman', '', 'India') 

這大概的意思是:抓住三組非白空格字符。中間一個是選項。

然後,您可以使用列表解析由NA來改變空字符串:

>>> m = re.search('(\S+)\s+(\S*)\s+(\S+)',my_string_another).groups() 
>>> m = [i if i else 'NA' for i in m] 
>>> m 
['Aman', 'NA', 'India'] 
+0

非常感謝你的反應。爲我完美工作。 –