Есть ли более короткий способ удаления разрывов строк при чтении из файла в список? - PullRequest
0 голосов
/ 08 октября 2011

Вот мой текущий код:

dfile = open('dictionary.txt', 'r')
sfile = open('substrings.txt', 'r')
dictionary_words = []
substrings = []

for line in dfile:
    dictionary_words.append(line.rstrip('\n'))
for line in sfile:
    substrings.append(line.rstrip('\n'))

Это работает, но кажется довольно многословным.

Это подходящий способ записать это, или я упускаю более простой процесс?

Ответы [ 5 ]

9 голосов
/ 08 октября 2011

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

with open('dictionary.txt', 'r') as f:
    dictionary_words = f.read().splitlines()
4 голосов
/ 08 октября 2011

Либо использовать map:

dictionary_words = map(lambda line: line.rstrip('\n'), dfile)

или список понимания :

dictionary_words = [line.rstrip('\n') for line in dfile]
3 голосов
/ 08 октября 2011

Несколько менее многословная альтернатива - использовать списочные выражения:

with open('dictionary.txt', 'r') as dfile:
  dictionary_words = [line.rstrip('\n') for line in dfile]

with open('substrings.txt', 'r') as sfile:
  substrings  = [line.rstrip('\n') for line in sfile]
1 голос
/ 09 октября 2011

Как отметил @Chris в комментарии, вы можете определить функцию:

def words_fromfile(filename):
    with open(filename) as f:
         return f.read().splitlines()

dictionary_words = words_fromfile('dictionary.txt')
substrings = words_fromfile('substrings.txt')

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

1 голос
/ 08 октября 2011

Кажется, ваш файл словаря содержит одно слово в строке.Это может помочь вам:

>>> words = [w.strip() for w in open('dictionary.txt').read().split('\n')]
...