Как напечатать каждый элемент списка в отдельных строках, перед которыми стоит номер строки в python?

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

Пока у меня есть,

import sys
with open(sys.argv[1], 'rt') as num:
    t = num.readlines()
    print("\n"[:-1].join(t))

Который в настоящее время дает показания:

Blah, blah, blah
etc, etc, etc
x, x, x

Но я хочу это прочтение:

1. Blah, blah, blah
2. etc, etc, etc
3. x, x, x

Спасибо за помощь.

3 ответа

Решение

Ты можешь использовать enumerate() и использовать str.rstrip() удалить все типы конечных пробелов из строки. и вы также можете использовать rstrip('\n') если вы уверены, что перевод строки будет \n только.:

for i,x in enumerate(t,1):
    print ("{0}. {1}".format(i,x.rstrip()))

С помощью fileinput.input можно перебирать файл строка за строкой. когда fileinput.input возвращает следующую строку, мы enumerate это отслеживать номер строки. Поскольку вход уже содержит новую строку, которую мы используем end="" в print метод, поэтому он не добавляет ненужной новой строки. С помощью format преобразовать номер строки и содержимое в форматированное представление.

import fileinput

for number, line in enumerate(fileinput.input(['some_file.txt']), 1):
    print('{0}. {1}'.format(number, line), end="")

Это кажется самым легким с enumerate, печатая каждую строку, как вы идете:

import sys
with open(sys.argv[1], 'r') as num:
    for i,line in enumerate(num,1):
        print("%d. %s"%(i,line[:-1]))  #equivalent to `"{0}. {1}".format(i,line[:-1])`

Конечно, вы можете обернуть все это в генератор, если вы хотите использовать join:

def number_lines(fname):
    with open(fname,'r') as f:
       for i,line in enumerate(f,1):
           yield "%d. %s"%(i,line[:-1])

print('\n'.join(number_lines(sys.argv[1])))
Другие вопросы по тегам