Вы не можете просто читать/записывать в один и тот же файл одновременно, потому что вы вставляете символы новой строки каждые 6 символов. Эти новые строки будут перезаписывать следующий символ в файле. Скажем, содержимое файла являются следующие:
123456789
Если вы просто написать строку в файл после каждого 6-й строке, файл будет иметь следующий вид:
123456
89
Обратите внимание, как символ новой строки затирает "7"
.
Если файл является относительно небольшим (пару мегабайт, может быть), вы можете не создавать временный файл и просто читать весь файл в память, установить позицию буфера обратно в 0, и переписать его, например, так:
with open(filename, 'r+') as f:
raw = f.read()
f.seek(0) #sets the buffer position back to the beginning of the file
for i in xrange(0, len(raw), limit):
line = raw[i:i+limit].rstrip('\n').replace('\n', ' ')
f.write(line + '\n')
Если файл очень большой, однако, это имеет смысл, чтобы не загружать все данные в памяти, и вместо того, чтобы писать временный файл, а затем скопировать потом:
with open(filename, 'r') as infile, open('tmp.txt', 'w') as outfile:
line =
while True:
line = infile.read(limit)
#if there is no more text to read from file, exit the loop
if not line:
break
outfile.write(line.rstrip('\n').replace('\n', ' ') + '\n')
import shutil
shutil.copyfile('tmp.txt', filename)
'for char in char.len()' Что вы пытаетесь сделать здесь?'char' не должен иметь метод' len() ', и даже если бы он это сделал, он бы не возвращал итерабельность. – GWW