अजगर: अगर एक रेखा एक खाली रेखा है तो कैसे जांचें


86

यह पता लगाने की कोशिश की जा रही है कि यदि कोई रेखा खाली है तो जांच करने के लिए एक चक्र कैसे लिखें।

फ़ाइल में कई तार हैं, और इनमें से एक अन्य कथनों से अलग करने के लिए एक रिक्त रेखा है (ए नहीं "", एक गाड़ी है और उसके बाद एक अन्य गाड़ी वापसी है जो मुझे लगता है)

new statement
asdasdasd
asdasdasdasd

new statement
asdasdasdasd
asdasdasdasd

चूंकि मैं फ़ाइल इनपुट मॉड्यूल का उपयोग कर रहा हूं, क्या यह जांचने का कोई तरीका है कि क्या कोई रेखा खाली है?

इस कोड का उपयोग करके यह काम करने लगता है, सभी को धन्यवाद!

for line in x:

    if line == '\n':
        print "found an end of line"

x.close()

जवाबों:


128

यदि आप केवल व्हाट्सएप के साथ लाइनों को अनदेखा करना चाहते हैं:

if not line.strip():
    ... do something

खाली स्ट्रिंग एक गलत मान है।

या यदि आप वास्तव में केवल खाली लाइनें चाहते हैं:

if line in ['\n', '\r\n']:
    ... do  something

दूसरा वह है जो मेरे मन में था, धन्यवाद! यदि लाइन ['\ n'] में है:
— user1006198

1
यदि आप केवल उपयोग कर रहे हैं if line in ['\n'], तो आपको उस के साथ प्रतिस्थापित करना चाहिए if line == '\n'।
— एंड्रयू क्लार्क

7
मैं यह बताना चाहता हूं कि स्वीकृत उत्तर में एक त्रुटि है: यदि line.strip (): ... # कुछ व्हाट्सएप के साथ लाइनों को नजरअंदाज करता है अर्थात स्पेस, टैब और खाली लाइन। इसलिए मूल पोस्टर के लिए केवल दूसरे ने काम किया: 'नहीं' को हटाना होगा।
— niefpaarschoenen

3
if नहीं line.strip (): ... कुछ करें। इसके बजाय इसे जारी नहीं रखना चाहिए? क्योंकि अगर लाइन नहीं। स्ट्रिप () वास्तव में इसका मतलब है कि लाइन खाली है, तो इससे कुछ भी नहीं छीना जा सकता है, इसलिए इसे अनदेखा करें या जारी रखें। पहला भाग लाइन नहीं ।स्ट्रिप () सभी खाली लाइनों को पकड़ता है
— धीवर रविकुमार

1
os.linesepइसके बजाय उपयोग करने के लिए क्लीनर होगा ['\n', '\r\n']?
— शॉन

24

मैं खाली कोड का उपयोग सफेद रिक्त स्थान के साथ या बिना परीक्षण करने के लिए करता हूं।

if len(line.strip()) == 0 :
    # do something with empty line

11
line.strip() == ''

या, यदि आप रिक्त स्थान से मिलकर "खाएं" नहीं चाहते हैं:

line in ('\n', '\r\n')

1
दूसरे नमूने में आप शायद \r\nविंडोज-स्टाइल लाइन एंडिंग्स (CRLF) के लिए भी जांचना चाहेंगे
— poplitea

यह उल्लेख करना भूल गया कि यह एक यूनिक्स मशीन पर चल रहा है, इसलिए यह बिना \ r के न्यूलाइन का उपयोग करता है। यह कोशिश की, लेकिन यह काम नहीं किया, मेरे लिए क्या काम कर रहा है: अगर लाइन ['\ n'] में: (कोई सुराग क्यों लाइन == "\ n" काम नहीं करेगा)
— user1006198

1
@ user1006198: यदि आप केवल जांच कर रहे हैं \n, तो line == '\n'बेहतर है। आपको शायद इसे फिर से आज़माना चाहिए और पता लगाना चाहिए कि आपकी समस्या क्या थी।
— retracile

@ user1006198: (1) यूनिक्स पर एक विंडोज-निर्मित टेक्स्ट फ़ाइल पढ़ना \r\nयदि आप उपयोग नहीं कर रहे हैं तो आपको दे देंगे mode='rU'(2) एक सुराग प्राप्त करें: print repr(line)और यदि वह कोई सुराग प्रदान नहीं करता है, तो हमें बताएं कि वास्तव में "क्या काम नहीं करता है" आपका मतलब है।
— जॉन मैकिन

एकमात्र व्याख्या जो मेरे पास है वह यह है कि शायद फ़ाइल इनपुट प्रत्येक लाइन के लिए कुछ करता है, क्योंकि जब मैं लाइन की तुलना == के साथ करता हूं तो मैं स्टेटमेंट को नहीं मारता (यह देखने के लिए एक स्ट्रिंग को प्रिंट करना कि क्या मैं रिक्त लाइन से टकरा गया हूं , और == के साथ यह डिबग लाइन को कभी प्रिंट नहीं करता है, जबकि यह तब होता है जब मैं "अगर लाइन में" का उपयोग करता हूं)।
— user1006198

2

आपको पाठ फ़ाइलों को खोलना चाहिए rUताकि नई लाइनें ठीक से रूपांतरित हो जाएं, http://docs.python.org/library/functions.html##en देखें । इस तरह से जाँच करने की कोई आवश्यकता नहीं है \r\n।


खुले की कोशिश की, लेकिन मैं अपने मामले के लिए फ़ाइल इनपुट को अधिक उपयुक्त
— पाता

5
यह भी ध्यान दिया जाना चाहिए कि Uतर्क python3 में समर्थित नहीं है।
— jtwilson

1

मुझे लगता है कि नियमित अभिव्यक्ति का उपयोग करने के लिए अधिक मजबूत है:

import re

for i, line in enumerate(content):
    print line if not (re.match('\r?\n', line)) else pass

यह विंडोज / यूनिक्स में मेल खाएगा। इसके अलावा अगर आप केवल स्पेस चार युक्त लाइनों के बारे में सुनिश्चित नहीं हैं, तो आप '\s*\r?\n'अभिव्यक्ति के रूप में उपयोग कर सकते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.