У меня есть блок текста, и я бы хотел добавить новый символ линии в конце любой строки, которая содержит менее 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()
Ну нравится:
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)
Желаемый выход.
Предполагая, что вы пытаетесь записать в новый файл, вам нужно что-то вроде этого:
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
если вам нужно этого избежать.
lines
- это список пар (каждый из которых имеет длину два). Вам нужно проверить длину подписок, а не пару, в которой она находится:
for i, seq in lines:
line_length.append(len(seq))
Хотя, как вы можете видеть, вы не используете i
, поэтому нет смысла использовать enumerate
.
enumerate
, потому что он на самом деле добавляет кортеж ((index, line)
(который имеет длину 2), а не просто строку строки.enumerate
, или если вам нужно получить номер строки, сделайтеfor i, line in lines: ...