अजगर में लाइन द्वारा एक लंबी बहुस्तरीय स्ट्रिंग लाइन कैसे पढ़ें


86

मेरे पास कई लाइनों के साथ एक स्ट्रिंग का एक दीवार है। मैं एक forखंड के साथ एक-एक करके लाइनें कैसे पढ़ूं? यहाँ मैं क्या करने की कोशिश कर रहा हूँ और मुझे for line in textDataलाइन में संदर्भित टेक्स्टडेटा var पर एक त्रुटि मिलती है ।

for line in textData
    print line
    lineResult = libLAPFF.parseLine(line)

टेक्स्टडेटा चर मौजूद है, मैं इसे नीचे जाने से पहले प्रिंट करता हूं, लेकिन मुझे लगता है कि पूर्व-संकलक त्रुटि को मार रहा है।

तिया

डेनिस


आपको अपनी लाइन को अलग-अलग तारों में विभाजित करने की आवश्यकता है। इसमें "/ n" होने से यह एक अलग स्ट्रिंग नहीं बनाता है।
— N_A

आपको क्या त्रुटि हो रही है (ट्रेसबैक के साथ)? में मूल्य क्या है textData? क्या आप हमें एक SSCCE दे सकते हैं , कुछ हम चला सकते हैं और एक ही समस्या को देख सकते हैं जैसा कि हम आपको समझा सकते हैं?
— अबार्नेट

इसके अलावा, "प्री-कंपाइलर" क्या है जो आपको लगता है कि "त्रुटि को मार रहा है"?
— अबार्नेट

जवाबों:


147

उपयोग करने के बारे में क्या .splitlines()?

for line in textData.splitlines():
    print(line)
    lineResult = libLAPFF.parseLine(line)

@BenjaminGruenbaum: "/r"और "/n"एक स्लैश और एक पत्र से मिलकर सामान्य दो-वर्ण तार हैं। क्या आपका मतलब था "\n"?
— गर्भपात

यह एक प्रति या एक पुनरावृत्ति है?
— user3226167

@ user3226167 यह एक सूची देता है ।
— बेंजामिन ग्रुएनबाउम

क्या स्प्लिटलाइन्स का एक इटरेटर संस्करण है जो सूची नहीं बनायेगा, बल्कि इटरेटर में वापस आ जायेगा?
— Youda008

स्ट्रिंगिंगियो है, लेकिन यह एक निचले स्तर का इंटरफ़ेस है। इस मामले में कहा गया है कि आपके पास पहले से ही एक स्ट्रिंग है - यदि आप एक इटेरेटर (उदाहरण के लिए एक फ़ाइल) को लाइन से लाइन करना चाहते हैं तो यह एक और सवाल है। याद रखें - इस मामले में आपके पास पहले से ही एक स्ट्रिंग है।
— बेंजामिन ग्रुएनबाम

6

newlines के साथ विभाजित करके।

for line in wallop_of_a_string_with_many_lines.split('\n'):
  #do_something..

यदि आप एक स्ट्रिंग पर पुनरावृति करते हैं, तो आप उस स्ट्रिंग में चार द्वारा चार्ट द्वारा नहीं, बल्कि चार्ट द्वारा पुनरावृति कर रहे हैं।

>>>string = 'abc'
>>>for line in string:
    print line

a
b
c

अब इसे पढ़ने वाले किसी के लिए, इसके बजाय str.splitlines () फ़ंक्शन का उपयोग करें। इस समाधान के साथ कुछ किनारे मामले उत्पन्न होते हैं। पूर्व के लिए। आप प्रत्येक लाइन पर iterate कहते हैं, यदि ऑब्जेक्ट की अंतिम पंक्ति के अंत में एक \ n है तो आपके लूप के लिए एक खाली लाइन पर कार्य करने और त्रुटियों का कारण बनने की कोशिश करेगा। स्वीकृत समाधान में ऊपर चर्चा की गई।
— Thefrollickingnerd

1

यह उत्तर कुछ मामलों में विफल रहता है (टिप्पणियां देखें)। उपरोक्त स्वीकृत समाधान इनसे निपटेगा। str.splitlines()जाने का रास्ता है। मैं इस उत्तर को संदर्भ के रूप में छोड़ दूंगा।

पुराना (गलत) उत्तर:

s =  \
"""line1
line2
line3
"""

lines = s.split('\n')
print(lines)
for line in lines:
    print(line)

शुक्रिया, @PR आपने मुझे भी कुछ सिखाया है। मुझे import re
— डीकेन

आप सिर्फ (या ) के re.splitबजाय नए वर्णों पर विभाजित करने के लिए उपयोग क्यों करेंगे ? एक एकल, स्थिर, शाब्दिक चरित्र से बाहर एक नियमित अभिव्यक्ति का निर्माण करना बिना किसी कारण के चीजों को और अधिक जटिल बना रहा है। str.splitsplitlines
— अबार्नेट

@PR पिछली चर्चा के साथ फिट होने के लिए, मुझे लगता है कि आपको s.split ('\ n') लिखना चाहिए था। R '\ n' के साथ विभाजन करने से काम नहीं होता है।
— डेविड एपस्टीन

मेरे कोड की कॉपी और पेस्ट मेरे लिए काम करता है (बस कोशिश की)। लेकिन अब इसे देखते हुए (3 साल के बाद, मैं बस इस्तेमाल कर सकता था s.split। अब इसे बदलना
— PR

1
split('\n')\rस्टिंग के भीतर किसी भी वर्ण को बनाए रखेगा । कैरिज रिटर्न डिलीट नहीं होगा, जो एक समस्या हो सकती है।
— टूथपिक एनीमोन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.