2012-05-05 4 views
0

В test.txt у меня есть 2 строки предложений.Как отобразить номер строки предложения (линия мультикана) в первой строке?

The heart was made to be broken. 
There is no surprise more magical than the surprise of being loved. 

В кодах:

import re 
file = open('test.txt','r')#specify file to open 
data = file.readlines() 
file.close() 

print "---------------------------------------------------" 
count = 0 
for line in data: 
    line_split = re.findall(r'[^ \t\n\r, ]+',line) 
    count = count + 1 
    def chunks(line_split, n): 
     for i in xrange(0, len(line_split), n): 
      yield line_split[i:i+n] 

    separate_word = list(chunks(line_split, 8)) 

    for i, word in enumerate(separate_word, 1): 
     print count, ' '.join(word) 
    print "---------------------------------------------------" 

Результаты кодов:

--------------------------------------------------- 
1 The heart was made to be broken. 
--------------------------------------------------- 
2 There is no surprise more magical than the 
2 surprise of being loved. 
--------------------------------------------------- 

есть ли возможный способ для отображения количества предложения только в первой строке?

Ожидайте результаты:

--------------------------------------------------- 
1 The heart was made to be broken. 
--------------------------------------------------- 
2 There is no surprise more magical than the 
    surprise of being loved. 
--------------------------------------------------- 
+1

Дон» t добавьте название языка в заголовок - для этого используются теги. –

ответ

1

Просто проверить, если это первая строка:

for i, word in enumerate(separate_word): 
    if i == 0: 
     print count, ' '.join(word) 
    else: 
     print " ", ' '.join(word) 

Я настоятельно рекомендую вам использовать the with statement, чтобы открыть файл. Это более читаемо и позволяет закрыть файл для вас, даже на исключениях.

Еще одной хорошей идеей является цикл непосредственно над файлом - это лучшая идея, так как она не загружает весь файл в память сразу, что не является необходимым и может вызвать проблемы с большими файлами.

Вы также должны использовать enumerate(), как вы это сделали здесь, для цикла data, так как вы не будете иметь дело с count.

Вы также определяете chunks() несколько раз, что немного бессмысленно, лучше определить его один раз в начале. При вызове его также нет необходимости составлять список - мы можем итерации непосредственно над генератором.

Если исправить все это, мы получаем уборщика:

import re 

def chunks(line_split, n): 
    for i in xrange(0, len(line_split), n): 
     yield line_split[i:i+n] 

print "---------------------------------------------------" 

with open("test.txt", "r") as file: 
    for count, line in enumerate(file, 1): 
     line_split = re.findall(r'[^ \t\n\r, ]+',line) 
     separate_word = chunks(line_split, 8) 
     for i, word in enumerate(separate_word): 
      if i == 0: 
       print count, ' '.join(word) 
      else: 
       print " ", ' '.join(word) 

     print "---------------------------------------------------" 

Стоит также отметить, что имена переменных немного вводит в заблуждение word, например, это не то слово.

+0

i == 0 ничего не показывать. Это правильно, если i == 1 – ThanaDaray

+0

@ThanaDaray Запомните мое изменение из 'enumerate (separate_word, 1)' to 'enumerate (separate_word)'. –

+0

@sarnold Упс, исправлено. –

0

Python поставляется с обертыванием текста, построенного в Признаюсь, что ниже форматирование не является совершенным, но вы получите идею :-)

#!/usr/bin/env python 

import sys 
import textwrap 

with open('test.txt') as fd: 
    T = [line.strip() for line in fd] 

for n, s in enumerate(T): 
    print '-'*42 
    sys.stdout.write("%d " % n) 
    for i in textwrap.wrap(s, 45): 
     sys.stdout.write("%s\n" % i) 
print '-'*42 

Выходы:.

------------------------------------------ 
0 The heart was made to be broken. 
------------------------------------------ 
1 There is no surprise more magical than the 
surprise of being loved. 
------------------------------------------ 
Смежные вопросы