2013-12-10 4 views
0

Я пытаюсь разобраться с «хорошими номерами» из «плохих». Моя проблема в том, что некоторые из чисел, которые я получаю из текстового файла, содержат пробелы (" "). Эти функции идентифицируют их путем разбиения на пространства, так что все строки, содержащие пробелы, отображаются как плохие числа, независимо от того, хороши они или плохи.python, пытаясь отсортировать строки из текстового файла

Кто-нибудь понял, как их отсортировать? Я использую это прямо сейчас.

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 

Текстовый файл выглядит следующим образом (все записи с комментарием "плохие"):

  • 13513 51235
  • 235235-23523
  • 2352352-23 - не действует
  • 235235 - слишком коротка
  • 324-134 3141
  • 23452566246 - слишком долго
+3

уточняйте требования к хорошим и/или плохим номерам, которые у вас есть. – Nicoretti

+0

@Ojayer Итак, каково ваше определение «хороших» и «плохих» слов здесь? – Ray

+0

Ум хорошо, я получил программу, которая проверяет, действителен ли или нет номер социального страхования. Независимо от того, что он записывает номер в текстовый файл, и если номер плохой, у него есть комментарий рядом с ним. Я хочу, чтобы иметь возможность «вызывать» действительные и недопустимые числа отдельно. – 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 

Вы можете добавить любое количество символов в список разрешенных_chars. Просто для удобства добавления персонажей. Я добавил \ n в список allowed_chars, чтобы обработать символ завершающего символа новой строки, основываясь на комментариях.

+0

это звучит отлично, но как-то он говорит, что все мои строки - плохие строки ... попробуем еще немного. – Ojayer

+0

вы также должны удалить завершающую новую строку: – moooeeeep

+0

Я получил это! спасибо alot :) – Ojayer

5

Это (еще один) классический пример того, где модуль Python 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

Начните учиться! Прочтите ссылку, которую я опубликовал в своем ответе. Он должен вести вас через основное регулярное выражение и даже имеет некоторые инструкции (ы). –

+0

Также, если мое решение не работает для ваших входных файлов, я предлагаю вам вернуться к вашей проблеме и вашим входным данным. Мы можем работать только с тем, что вы нам представляете :) Во всяком случае, я думаю, что у вас достаточно, чтобы продолжать самостоятельно ... –

Смежные вопросы