В документации .readlines () , по сути, читает все строки в файле и возвращает список всех строк.
Также обратите внимание, что вы можете просто for line in text
перебирать строки, и, поскольку text
является итерацией, вы также можете перечислять его. Чтобы пропустить первую строку, просто используйте .next()
, которая также возвращает строку, таким образом, вы можете сохранить ее и / или записать, используя .next
, а затем просто перебрать их.
Принимая во внимание пример, который вы даете, и результат, который вы хотите, я говорю, что вам не нужен весь этот код (и при этом вам не нужен readlines()
или enumerate()
на самом деле), чтобы получить результат, который вы находясь в поиске. Я говорю, что вы можете использовать что-то, что просто определяет конец абзаца как строку, которая заканчивается точкой и возвратом каретки. (т. Е. '.\n
)
unformatted = open("unformated.txt", "r")
formatted = open("formated", "w")
#use .next() to get the next line. .next for the first time returns the first line
formatted.write(unformatted.next().title().center(100)
#then the rest just split paragraphs as I described above
for line in unformatted:
if line.endswith('.\n')
formatted.write('{}\n}'.format(line))
elif line.startswith('Prudence'):
formatted.write('\t{}\n'.format(unformatted.next()))
else:
formatted.write(line.replace('\t', ''))
Это должно дать вам желаемый результат, просто помните, как я распознаю параграф.
РЕДАКТИРОВАТЬ - , как указано выше, содержит операторы if
Технически вы могли бы просто предположить, что первые 2 строки являются строками заголовка. и использовать для них диктовщик. Это понадобится enumerate()
.
def make_title(t):
return t.title().center(100)
def make_subtitle(t):
return '\t' + t
def other_lines(t):
return x.replace('.\n', ',\n\n')
special_lines = {
0: make_title,
1: make_subtitle
}
for n, line in enumerate(unformatted):
formatted.write(special_lines.get(n, other_lines))(line)
Кто-нибудь, пожалуйста, проверьте мою работу. Я не за компьютером, чтобы проверить, но я думаю, что это правильно, учитывая его ограничения, я знаю, что мог бы использовать лямбду для функций, но я не хотел переусердствовать.