Когда вы работаете с with context
над открытым файлом, with
автоматически позаботится о его закрытии, когда вы выйдете из этого блока.Поэтому вам не нужно ни file.close()
.
Существует функция с именем readlines
, которая выводит генератор, который читает строку из открытого файла по одной строке за раз.Это будет работать намного эффективнее, чем read()
, за которым следует split()
.Думаю об этом.Вы загружаете массивный файл в память, а затем просите CPU разделить этот огромный текст на \n
символ.Не очень эффективно.
Вы написали opfile.write(op)
.Где это op
определено?Разве вы не хотите писать содержимое в holding
, которое вы определили?
Попробуйте выполнить следующее.
with open('test.data', 'r') as myfile:
counter = 1
content = ""
start = True
for line in myfile.readlines():
if line == "-\n" and not start:
with open(str(counter) + '.md', 'w') as opfile:
opfile.write(content)
content = ""
counter += 1
else:
if not start:
content += line
start = False
# write the last file if test-file.yml doesn't end with a dash
if content != "":
with open(str(counter) + '.md', 'w') as opfile:
opfile.write(content)