2013-09-04 3 views
0

У меня есть текстовый файл, содержащий число, пробел и имя.
Например:
12 куриной
1 хлеб
24 лесаДобавление текста в строку в файле

Я довольно новый для Python, но мне интересно, если есть способ, чтобы добавить текст к этому списку, чтобы он мог стал как:

список лакомства
номер 12 цыпленка для меня
номер 1 хлеба для меня

Я пишу следующий код, но я до сих пор proble m, чтобы добавить «из» в середине строки.

import fileinput 
import sys 

for line in fileinput.input(['./lista.txt'], inplace=True): 
    if fileinput.filelineno() == 1: 
     sys.stdout.write('list of goodies{l} \n'.format(l=line)) 

    sys.stdout.write('{0}{1}{2}'.format('number', line.rstrip('\n'), 'for me \n')) 

И я не ясно понимать использование .format

ответ

0

Попробуйте сделать:

import fileinput 
import sys 

print 'list of goodies' 
for line in fileinput.input(['./lista.txt'], inplace=True): 
    number, item = line.rstrip().split(' ', 1) # strip new line from right, split on first space 
    print 'number {0} of {1} for me'.format(number, item) 

В принципе, формат имеет ряд строковых аргументов, которые он затем вставляет в строку, которую вы называете его вместо идентификаторов {0}, {1}, ... где число представляет его позицию в списке аргументов. Если вы укажете именованный аргумент (l = line), он будет вставлен в строку, где всплывает {argname}. Например:

print '{0}.{0}-{1}:{test}'.format('first','second', test='third') 

напечатает

first.first-second:third 
+0

, но это не сработает, если у меня есть сложное слово: арахисовое масло – user2748576

+0

Вы правы в этом. line.split ('', 1) должен это сделать. Исправление моего ответа. –

+0

Я не понимаю, почему я нахожу для меня в следующей строке – user2748576

0

Чтобы включить «12 курица» в «12 цыплят», вам необходимо split строку на слова, а затем join их назад вместе с «из» посередине. Например:

s = '12 chicken' 
print(s.split()) 
print(" of ".join(s.split())) 

производит это:

['12', 'chicken'] 
12 of chicken 

Примените это к line в цикле.

Дальнейшие пояснения: Постараюсь помочь вам разобраться в format(). Значение '{0}{1}{2}' означает первый, второй и третий аргументы format() и объединяет их. Например, в выражении '{0}{1}{2}'.format('number', line.rstrip('\n'), 'for me \n'):

  • {0} соответствует 'number'
  • {1} соответствует line.rstrip('\n') (например, "12 chicken")
  • {2} соответствует 'for me \n'

Для замены "12 chicken" с "12 of chicken", вам необходимо заменить line.rstrip('\n') на s в " of ".join(s.split()), производя " of ".join(line.rstrip('\n').split()).

+0

sys.stdout.write ('{0} {1} {2}} 3' формат ('число', 'of'.join (линия. .split()), линия.rstrip ('\ n'), 'for me \ n')) Я получаю «number12ofchicken12 chickenfor me» – user2748576

+0

В вашем комментарии кажется, что '{0}' '' 'number'',' {1} ' это '' of'.join (line.split()) ', а' {2} '-' line.rstrip ('\ n') '. Вам нужно применить операции 'split' и' join' к 'line.rstrip ('\ n')' самому: ''of'.join (line.rstrip(). Split())' –

+0

он работал, и я вам очень нравится. Я получил ошибку. Даже если я не понимаю, почему мне не нужно указывать параметр line.rstrip(). – user2748576

Смежные вопросы