您不能同時讀/寫同一個文件,因爲您每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