2014-11-15 3 views
1

Я получаю текстовую строку из файла. После этого я делаю цикл for над строкой (мне нужно сохранять слова), и все работает отлично, за исключением последнего слова в файле, если после него нет разделителя.Не удается найти нужный конец строки

Мой код:

for symbol in text: 
     if symbol == ' ' or symbol == '-' or symbol == ',' or symbol == '\n': 
      lastWord = ''.join(tmpList) 
      del tmpList[:] 
      print lastWord 
     else: 
      tmpList.append(symbol) 

Я понял, что нет NULL-терминации в Python. Может быть, я пытаюсь решить это на языке C, и такой алгоритм для Python неверен?

Я добавил переменную счетчика и еще одну проверку на блок «else», и он отлично работает. Интересно, правильно ли это, или я могу сделать то же самое проще в python. Else-блок теперь выглядит следующим образом:

else: 
    tmpList.append(symbol) 
    count += 1 
    if count == len(text): 
     lastWord = ''.join(tmpList) 
     del tmpList[:] 
     print lastWord 
+3

Если в конце файла нет пустой строки, после последнего слова символ не будет. – jonrsharpe

+0

да, это мой вопрос – lazyexpert

ответ

1

вещий способ написания этого:

if symbol == ' ' or symbol == '-' or symbol == ',' or symbol == '\n': 

является:

if symbol in ' -,\n': 

Я думаю, что было бы лучше сказать, что вы хотите do, вы хотите просто напечатать текст минус '', '-', ',', '\ n'?

причина, если да, то вещий путь:

for char in '-,\n': 
    text = text.replace(char, ' ') 
for word in text.split(): 
    print(word) 

если строка большие или эксплутационные вопросы, взгляните на re модуля, он идеально подходит для такого рода работ (посмотреть на функции разделенного)

+0

не секрет здесь, его одна из обучающих задач Google. Mimic.py. Я должен сделать dict {key: value}, где ключ - каждое слово в файле, а value - массив слов, следующих за ним. Как вы видите, я нахожусь в самом начале: D – lazyexpert

+0

Вероятно, нужно переименовать 'symbol' в' word' в фрагменте text.split(). –

+0

сделано спасибо за совет -_- –

0

Ваш код собирает символы в tmpList и освобождает его, когда он встречает разделитель. Один из способов, чтобы найти последнее слово просто проверить, если tmpList содержит ничего, когда цикл выполняется:

for symbol in text: 
    if symbol == ' ' or symbol == '-' or symbol == ',' or symbol == '\n': 
     lastWord = ''.join(tmpList) 
     del tmpList[:] 
     print lastWord 
    else: 
     tmpList.append(symbol) 
if tmpList: 
    lastWord = ''.join(tmpList) 
    del tmpList[:] 
    print lastWord 

Но ясно, что ответ Лодовико имеет более чистое решение.

+0

Ок, Янн, я только что узнал от вас что-то новое, поэтому спасибо. – nbro

0

Более простым решением может быть использование функции split().

words = text.split(' -,\n') 

, который предоставит вам список слов для обработки.

+0

Нет. Str.split будет разбиваться на пробелы, если не задан разделитель, но если для данного разделителя потребуется весь разделитель, а не только любой символ в нем. –

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