2012-03-13 2 views
1

또 다른 질문입니다.라인 계산 및 번호 매기기

해시 태그가 있거나 행이 비어 있지 않으면이 프로그램은 코드의 모든 행을 센다. 해시 태그 외에 모든 줄에 번호를 매기도록했습니다. 빈 줄을 계산하지 않으려면 어떻게합니까?

def main(): 

    file_Name = input('Enter file you would like to open: ') 

    infile = open(file_Name, 'r') 

    contents = infile.readlines() 
    line_Number = 0 
    for line in contents: 
     if '#' in line: 
      print(line) 
      if line == '' or line == '\n': 
       print(line) 
     else: 
      line_Number += 1 
      print(line_Number, line) 

    infile.close() 

main() 

답변

3

if'#' in line 인 경우 True이 될 수 있습니다. 실제로

if '#' in line or not line or line == '\n': 
    print line 

하지만, 왜 당신이 빈 인쇄 할 필요가있을 것이다 : 기본적으로 , 당신은 동일한 작업을 수행하기 때문에,이 두 경우를 결합 할 수 있으며, if line == '' or line == '\n': 라인은 왼쪽 :) 또한

으로 이동해야합니다 얼룩이나 '\n'?

편집 : if '#' in line or not line.strip()을 : 같은 line == '\t' 다른 경우는 같은 방식으로 처리해야한다 경우,이 팀의 조언을 사용하여 수행 할 좋습니다.

+2

'line == '\ n''인 경우'not line'은'True'가되지 않습니다. line에서'# '을 사용했는지 아닌지 line.strip()'을 사용하지 않는 것이 더 좋을 것입니다. 또한 공백 만있는 행을 빈 것으로 계산합니다. –

+0

감사합니다. @TimPietzcker. 이것은 또한''\ t''과 아마도 더 많은 기호들을 커버 할 것입니다. 아마, 그것은 바람직한 행동이 될 것입니다; 결국 메모를 추가했습니다. –

0

당신은 루프에 대한 당신의 시작 부분에 다음을 추가하여 빈 줄을 건너 뛸 수 있습니다 :

파이썬에서
if not line: 
    continue 

, 빈 문자열이 True 부울 값으로 평가한다. 이 경우 문자열이 비어있을 때이 if 문만 True이므로 빈 줄은 건너 뜁니다.

continue는 루프를 통과 한 다음에 코드가 계속됨을 의미합니다. 그 명령문 다음에 코드를 실행하지 않을 것이고 이것은 라인을 세는 코드가 건너 뛴다는 것을 의미합니다.