2013-09-18 3 views
3

Я чтение строки из файла, содержащего один [*] слово/линии, такие как:Как удалить строки из каждой строки во время чтения файла?

dog 
cat 
person 
tree 

Каждый из этих слов также содержит символ новой строки \n характер. Я хочу прочитать их в списке и выбросить новые строки. Способ я придумал это читать с readlines() и затем обработать список strip() символ новой строки:

with open('words.txt') as f: 
    words = f.readlines() 

for index, word in enumerate(words): 
    words[index] = word.strip() 

Это прекрасно работает, но я не могу не думать, что есть более эффективный способ сделать это, чтобы лишить новые строки во время процесса чтения. Но я не могу найти способ. Есть ли что-то более эффективное (хотя и учитывая читаемость и т. Д.)

[*] UPDATE: Я должен был упомянуть, что некоторые строки могут содержать более одного слова, и в тех случаях, однако, многие слова на линии должны идти в один элемент списка. Оба ответа до сих пор справляются с этим (как и мой собственный код), но я хотел бы упомянуть об этом.

ответ

5

Вы можете использовать map:

with open('words.txt') as f: 
    words = map(str.rstrip, f) 
+3

rstrip, если вы хотите быть еще более точным :) (не то, что это необходимо или что-нибудь) – TerryA

+0

@Haidro Действительно. :) –

+0

И даже 'rstrip (" \ n ")' для удаления только символа новой строки (или 'rstrip (" \ n \ r ")' для удаления как новой строки, так и возврата каретки). –

2

Вы могли бы написать: lines = [s.rstrip("\n\r") for s in f.readlines()] (обратите внимание, что это не просто strip, который будет делать больше, чем удалить символы EOL) ,

Однако, если ваш файл большой, вы должны возможно обработать каждую строку в цикле, а не laoding весь файл, например, как в:

while True: 
    s = f.readline() 
    if s == "": 
     break # end of file 
    line = s.rstrip("\n\r") 
    ... 
2

Для обработки более одного слова в строке может захотеть разделить линию.

with open('words.txt') as f: 
    result = [words.strip().split() for words in f] 

Это создаст список списков, большинство из которых являются одним элементом. Так, например, вы могли бы это сделать.

for words in result: 
    print len(words) 
Смежные вопросы