2017-03-21 3 views
-1

Warum verhält sich der Code if line and not line[0].isdigit() and line != '\n': während und außerhalb des Projekts anders? Ich habe den folgenden Code ein Auszug aus meinem Projekt meltsubtitles in Zeile 88:Pythons `if`-Anweisung verhält sich unterschiedlich abhängig davon, wo sie ausgeführt wird?

with open('test.txt', 'r', encoding='utf-8') as finput: 
    for line in finput: 
     if line and not line[0].isdigit() and line != '\n': 
      pass 
     else: 
      print(line) 

, wenn ich den Code aus Projekt extrahieren und mit text.txt laufen, ausdrucken:

1 

00:00:03,940 --> 00:00:07,550 



2 

00:00:09,280 --> 00:00:10,650 

aber wenn ich Legen Sie einen ähnlichen Code zu meinem Projekt, die erste line '1\n' wird nicht gedruckt. Die Ausgabe lautet:

00:00:03,940 --> 00:00:07,550 

2 
00:00:09,280 --> 00:00:10,650 

Was ich erwarte, ist:

1 
00:00:03,940 --> 00:00:07,550 

2 
00:00:09,280 --> 00:00:10,650 

wenn line = '1\n', ich PyCharm zu debuggen und Schritt in die kritische Linie if line and not line[0].isdigit() and line != '\n':, es seltsam Lauf in die if Anweisung verwendet haben, während sollte es nicht ,, aber wenn ich den Code extrahieren, wird es nicht in if Anweisung laufen.

Die test.txt Datei ist

1 
00:00:03,940 --> 00:00:07,550 
Horsin' Around is filmed before a live studio audience. 

2 
00:00:09,280 --> 00:00:10,650 
Mondays. 

Mein Projekt in Github meltsubtitles Linie 88. Ich bin mit Python 3.5 und in win 10.

+0

Warum die downvote? – EvanL00

Antwort

0

Was ist Ihr Mittel ist über Ähnliche Code?

ich umschreiben die Aufgabe von Codes:

import logging 
logging.basicConfig(level=logging.DEBUG) 

def begin_numebr(string=None): 
    if string is None: 
     return False 
    else: 
     return string.strip() != '' and string[0].isdigit() 

def line_filter(lines): 
    return filter(lambda line: begin_numebr(line), lines) 

for line in line_filter(open('test.txt')): 
    print(line) 

def test(): 
    assert(begin_numebr('')==False) 
    assert(begin_numebr(' ')==False) 
    assert(begin_numebr('\n')==False) 
    assert(begin_numebr('\t')==False) 
    assert(begin_numebr('\b')==False) 
    assert(begin_numebr()==False) 
    assert(begin_numebr('not digit')==False) 
    assert(begin_numebr('00not digit')==True) 
    print('test done') 

    lines = ['001', 'this is'] 
    logging.debug(line_filter(lines)) 
    assert(line_filter(lines) == ['001']) 

#test() 
Verwandte Themen