您不能同时读/写同一个文件,因为您每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)
'char for char.len()'你在这里做什么?'char'不应该有'len()'方法,即使它做了也不会返回一个迭代。 – GWW 2012-07-11 17:12:39