2010-03-22 17 views
21

मैं जो दिखता है एक लॉग फ़ाइल, से एक स्वरूपित स्ट्रिंग है जैसे:पायथन: एक सीमांकक के 1 या अधिक घटनाओं से विभाजित

>>> a="test       result" 

यही है, परीक्षण और परिणाम कुछ रिक्त स्थान के आधार पर विभाजित कर रहे हैं - यह शायद स्वरूपित स्ट्रिंग का उपयोग करके बनाया गया था जो test कुछ निरंतर अंतर प्रदान करता था।

सरल बंटवारे चाल से काम नहीं चलेगा:

>>> a.split(" ",1) 
['test', '       result'] 

इस मदद की - लेकिन निश्चित रूप से, मैं वास्तव में जरूरत है::

>>> a.split(" ") 
['test', '', '', '', ... '', '', '', '', '', '', '', '', '', '', '', 'result'] 

split(DELIMITER, COUNT) कुछ अनावश्यक मूल्यों को मंजूरी दे दी

['test', 'result'] 

मैं split() का उपयोग कर mapका उपयोग कर सकता हूं, लेकिन मुझे आश्चर्य हुआ कि क्या ऐसा करने के लिए एक और पाइथोनिक तरीका है।

धन्यवाद,

एडम

अद्यतन: इस तरह के एक सरल उपाय! आप सभी को धन्यवाद।

उत्तर

39

बस किसी भी delimeter देना नहीं है?

>>> a="test       result" 
>>> a.split() 
['test', 'result'] 
+9

यह क्यों काम करता है: a.split (कोई नहीं) एक विशेष मामला है, जिसमें पायथन का अर्थ है "एक या अधिक सफेद जगहों पर विभाजित"। re.split() सामान्य मामला समाधान है। –

+1

किसी को str.split (कोई नहीं, maxsplit) का उपयोग करने की आवश्यकता है क्योंकि फ़ंक्शन कीवर्ड तर्क स्वीकार नहीं करता है। मुझे आश्चर्य है क्योंकि। – tbrittoborges

+0

सवाल था, कैसे delimiter + (एक या अधिक) के साथ विभाजित करने के लिए। आप जवाब दे रहे हैं कि किसी भी व्हाइटस्पेस को डिलीमीटर के रूप में लिया जाएगा, जो सही उत्तर नहीं है – Risinek

16

बस इस काम करना चाहिए:

a.split() 

उदाहरण:

>>> 'a  b'.split(' ') 
['a', '', '', '', '', '', 'b'] 
>>> 'a  b'.split() 
['a', 'b'] 

documentation से:

सितम्बर तय नहीं है तो या कोई नहीं है, एक अलग बंटवारे एल्गोरिथ्म लागू किया जाता है : लगातार सफेद जगहों के रनों को एकल विभाजक के रूप में माना जाता है, और परिणाम में कोई खाली तार नहीं होगा अगर स्ट्रिंग ने व्हाइटस्पेस का नेतृत्व किया है या पीछे है तो शुरू करें या समाप्त करें। नतीजतन, एक खाली स्ट्रिंग या स्ट्रिंग को विभाजित करना जिसमें कोई भी विभाजक रिटर्न [] के साथ सिर्फ सफेद जगह नहीं है।

25
>>> import re 
>>> a="test       result" 
>>> re.split(" +",a) 
['test', 'result'] 

>>> a.split() 
['test', 'result'] 
+1

कूल। अन्य, किसी भी whitespace delimiters के साथ मदद कर सकते हैं। –

+1

re.split ('\ W +', mystring) अधिक समतुल्य string.split (कोई नहीं) है। –

+5

वास्तविक अनुरोध का यह एकमात्र उत्तर है, "एक डेलीमीटर के 1 या अधिक घटनाओं द्वारा विभाजित"। –

4

सरल a.split() के साथ कोई समस्या?

+0

जाहिर है, कोई नहीं। –

+0

सवाल था, कैसे delimiter + (एक या अधिक) के साथ विभाजित करने के लिए। आप जवाब दे रहे हैं कि किसी भी व्हाइटस्पेस को डिलीमीटर के रूप में लिया जाएगा, जो सही उत्तर नहीं है – Risinek

0

बस एक और तरीका जोड़ना, उन मामलों में अधिक उपयोगी जहां डेलीमीटर अंतरिक्ष से अलग है, और s.split() काम नहीं करेगा।

str = की तरह "अजगर, ,, अधिक ,,,,, लचीला है"।

In [27]: s = "Python is more  flexible" 

In [28]: str_list = list(filter(lambda x: len(x) > 0, s.split(" "))) 

In [29]: str_list 
Out[29]: ['Python', 'is', 'more', 'flexible'] 
संबंधित मुद्दे