2013-12-19 1 views
1

Я пытаюсь выяснить простой способ сортировки слов из файла, однако при печати слов всегда возвращаются пробелы «\ n». Как я могу улучшить этот код, чтобы он работал правильно? Я использую python 2.7 Спасибо заранее.Как сортировать содержимое в файле в python

def sorting(self): 
    filename = ("food.txt") 
    file_handle = open(filename, "r") 
    for word in file_handle: 
     word = word.split() 
     print sorted(file_handle) 
    file_handle.close() 

ответ

0

Используйте .strip(). По умолчанию удаляется пустое пространство. Вы также можете добавить другие символы (например, «\ n») для полоски. Это оставит только слова.

+0

'' \ n "' уже включен в пробел по умолчанию, используемый 'strip()'; вам не нужно добавлять его. (И если вы добавили _do_, вам нужно найти все другие символы по умолчанию и добавить их тоже, потому что вы больше не получаете значения по умолчанию.) – abarnert

2

В основном все, что вам нужно сделать, это раздеться, что символ новой строки (и все другие пробелы, потому что вы, вероятно, не хотите):

def sorting(self): 
    filename = ("food.txt") 
    file_handle = open(filename, "r") 
    for line in file_handle: 
     word = line.strip().split() 
     print sorted(file_handle) 
    file_handle.close() 

В противном случае вы можете просто удалить последний символ с line[:-1].split()

+0

Вероятно, это немного больше Pythonic для использования диспетчера контекста 'с 'для обработки файла. – treddy

+0

В зависимости от варианта использования вы часто хотите использовать 'rstrip()' или 'rstrip ('\ n')' для удаления только конечной новой строки, оставляя, скажем, вкладки абзаца или пробелы абзаца. Но это звучит, как в случае использования ОП, для этого нет оснований, и все в порядке. – abarnert

+0

Я пробовал все эти возможные изменения, но все равно возвращает мне пробелы. '['\ n', 'five \ n', 'four \ n', 'one \ n', 'three \ n' , 'two \ n'] ' – wombatp

0

Попробуйте это:

def sorting(self): 
    words = [] 
    with open("food.txt") as f: 
     for line in f: 
      words.extend(line.split()) 
    return sorted(words, key=lambda word: word.lower()) 
-1

Чтобы избежать печати новых линий просто положить, в конце концов:

print sorted (file_handle),

В вашем коде я не вижу, что вы сортируете весь файл, только строку. Используйте список, чтобы сохранить все слова, и после того, как вы прочитали файл, отсортируйте их все.

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