2013-12-10 2 views
0

"나쁜 숫자"와 "좋은 숫자"를 정렬하려고합니다. 제 문제는 텍스트 파일에서 가져 오는 숫자 중 일부에 공백이 포함되어 있다는 것입니다 (" "). 이 함수는 공백을 포함하여 공백을 포함하는 모든 줄이 좋거나 나쁘거나 상관없이 공백으로 나눠서 구분합니다.파이썬에서 텍스트 파일의 줄을 정렬하려고 시도했습니다.

누구나 그들을 어떻게 분류하는지 알 수 있습니까? 지금 이걸 사용하고 있습니다. 너무 짧은 - -

  • 235235 유효하지

    • 13513 51235
    • 235235-23523
    • 2352352-23 :

      def showGoodNumbers(): 
          print ("all good numbers:") 
          textfile = open("textfile.txt", "r") 
          for line in textfile.readlines(): 
           split_line = line.split(' ') 
           if len(split_line) == 1: 
            print(split_line) # this will print as a tuple 
          textfile.close 
      
      def showBadNumbers(): 
          print ("all bad numbers:") 
          textfile = open("textfile.txt", "r") 
          for line in textfile.readlines(): 
           split_line = line.split(' ') 
           if len(split_line) > 1: 
            print(split_line) # this will print as a tuple 
          textfile.close 
      

      는 텍스트 파일 (주석 모든 항목이 "나쁜"이다)과 같다

    • 324-134 3141
    • 23452566246 - 너무 오래
  • +3

    좋은 번호 및/또는 나쁜 번호에 대한 요구 사항을 정확하게 지정하십시오. – Nicoretti

    +0

    @Ojayer 그래서 "좋은"단어와 "나쁜"단어에 대한 정의는 무엇입니까? – Ray

    +0

    음, 사회 보장 번호가 유효한지 또는 유효하지 않은지를 확인하는 프로그램이 있습니다. 관계없이 숫자를 텍스트 파일에 쓰고 번호가 잘못되면 옆에 주석이 표시됩니다. 유효 번호와 유효하지 않은 번호를 seperatly "call"하고 싶습니다. – Ojayer

    답변

    1

    여기에서 문자열 조작 만 있으면됩니다. .

    allowed_chars = ['-', '.', ' ', '\n'] 
    with open("textfile.txt", "r") as fp: 
        for line in fp: 
         line_check = line 
         for chars in allowed_chars: 
          line_check = line_check.replace(chars, '') 
         if line_check.isdigit(): 
          print "Good line:", line 
         else: 
          print "Bad line:", line 
    

    allowed_chars 목록에는 원하는만큼의 문자를 추가 할 수 있습니다. 문자를 쉽게 추가 할 수 있습니다. 주석에 따라 후행 줄 바꿈 문자도 처리 할 수 ​​있도록 allowed_chars 목록에 \ n을 추가했습니다.

    +0

    이것은 훌륭하게 들리지만 어떻게 든 내 모든 라인이 나쁜 라인이라고 말하면서 더 많이 시도 할 것입니다. – Ojayer

    +0

    당신은 후행 줄 바꿈도 제거해야합니다. – moooeeeep

    +0

    나는 그것을 작동 시켰습니다! 고마워요 :) – Ojayer

    5

    이다 (또 다른) 파이썬 re 모듈이 빛을 발하는 곳의 전형적인 예 :

    from re import match 
    
    
    with open("textfile.txt", "r") as f: 
        for line in f: 
         if match("^[0-9- ]*$", line): 
          print "Good Line:", line 
         else: 
          print "Bad Line:", line 
    

    출력 :

    Good Line: 13513 51235 
    
    Good Line: 235235-23523 
    
    Bad Line: 2352352-23 - not valid 
    
    Bad Line: 235235 - too short 
    
    Good Line: 324-134 3141 
    
    Bad Line: 23452566246 - too long 
    
    +0

    hm ye 나는 정말 정규 표현식을 이해하지 못한다.하지만 어떻게 든 내 목록에는 나쁜 행만이 들어있다. 확실하지 않은 이유 – Ojayer

    +0

    학습 시작! 내 대답에 게시 된 링크를 통해 읽어보십시오. 기본 정규식을 안내하고 HowTo (s)도 있습니다. –

    +0

    또한 내 솔루션이 입력 파일에 대해 작동하지 않는다면 문제와 입력 데이터를 다시 방문해야한다고 제안합니다. 우리는 당신이 우리에게 선물하는 것만으로 작업 할 수 있습니다 :) 어쨌든 나는 당신이 혼자서 할 수있을만큼 충분하다고 생각합니다 ... –

    관련 문제