2014-02-07 3 views
2

Я хочу дать разрыв n-й строке текстового файла. До сих пор я придумал следующие:Вставить строку перерыв n-я строка файла

Исходный код

def line_break_file(foo): 
     with open(foo) as f: 
      lines = f.readlines() 
      [' '.join(lines[3 * i: 3 * i + 3]) for i in range(0, len(3)/3)] 

Входной файл

50.000 
0.6016 
1.0000 
100.00 
0.7318 
1.0000 

Выходной файл

50.000 
0.6016 
1.0000 

100.00 
0.7318 
1.0000 

Любое предложение будет в значительной степени оценено. Благодарю.

ответ

6

Вы могли бы сделать генератор, который дает пустую строку (или что вы хотите) каждые n линии:

def breakn(lines, n, sep=''): 
    for line in lines: 
     if not line % n: 
      yield sep 
     yield line 

list(breakn(lines, 3)) 

Это действительно зависит от предполагаемого использования после его приготовления. Для того, чтобы сохранить его обратно в файл:

with open('newfile.txt', 'w') as newfile: 
    for line in breakn(lines, 3, '\n'): 
     newfile.write(line) 
+0

Я просто напечатал почти это точное функция. Ницца. – roippi

+1

если вы назвали его то же самое ** тогда ** я был бы напуган! – mhlester

0
def line_break_file(foo): 
    f = open(foo) 
    lines = f.read().split() 
    for i in range(len(lines)): 
     if not i % n: 
      print 
     print lines[i] 
    f.close() 
0

Чтобы создать новый файл:

def lineBreak(infilepath, outfilepath, n): 
    with open(infilepath) as infile, open(outfilepath, 'w') as oufile: 
     for i,line in enumerate(infile): 
      outfile.write(line) 
      if not i%n: 
       outfile.write('\n') 

Чтобы перезаписать существующий файл:

def lineBreak(infilepath, n): 
    with open(infilepath) as infile: 
     lines = infile.readlines() 
    with open(infilepath, 'w') as outfile: 
     for i,line in enumerate(lines): 
      outfile.write(line) 
      if not i%n: 
       outfile.write('\n') 
Смежные вопросы