Получение длины каждой строки в списке

1

У меня есть блок текста, и я бы хотел добавить новый символ линии в конце любой строки, которая содержит менее 50 символов.

Вот где я нахожусь

text = open('file.txt','r+')

line_length = []
lines = list(enumerate(text))

for i in lines:
    line_length.append(len(i))

print lines
print line_length

Я просто получаю большой список значений 2 снова и снова. Я знаю, что длина каждой строки не равна 2.

Edit: Здесь решение, с которым я пошел

text = open('text.txt','r+')
new = open('new.txt','r+')

new.truncate(0)

l=[]

for i in text.readlines():
    if len(i) < 50:
        l.append(i+'\n')
    else:
        l.append(i)

new.write(' '.join(l))

text.close()
new.close()
  • 1
    Не используйте enumerate , потому что он на самом деле добавляет кортеж ( (index, line) (который имеет длину 2), а не просто строку строки.
  • 0
    Не используйте enumerate , или если вам нужно получить номер строки, сделайте for i, line in lines: ...
Теги:

3 ответа

2
Лучший ответ

Ну нравится:

text = open('file.txt','r+')
l=[]
for i in text.readlines():
    if len(i)<50:
        l.append(i)
    else:
        l.append(i.rstrip())

Нет необходимости enumerate.

Или однострочный (я рекомендую это):

l=[i if len(i)<50 else i.rstrip() for i in text.readlines()]

Таким образом, ваш код не работает, потому что действительно enumerate.

Оба случая:

print(l)

Желаемый выход.

  • 1
    Просто чтобы подтвердить, text.readlines () проходит и разделяет каждую строку в свое собственное значение, а затем каждый экземпляр цикла for применяет эти функции к этой отдельной строке / значению.
  • 0
    @ Себастьян правильно
0

Предполагая, что вы пытаетесь записать в новый файл, вам нужно что-то вроде этого:

with open("file.txt", "r+") as input_file, open("output.txt", "w") as output_file:
    for line in input_file:
        if len(line) < 50:
            line += '\n'
        output_file.write(line)

Строки в вашем существующем файле часто будут иметь символ новой строки в конце их уже, так что результат будет двумя символами новой строки для строк длиной менее 50. Используйте rstrip если вам нужно этого избежать.

0

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

for i, seq in lines:
  line_length.append(len(seq))

Хотя, как вы можете видеть, вы не используете i, поэтому нет смысла использовать enumerate.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню