2016-04-10 2 views
-2

Я пытаюсь создать скрипт, который читает только первое слово каждой строки и сохраняет их. Как только первое слово является **, оно заменяется последним разумным сохраненным словом. Неважно, если это из предыдущей строки или 10 строк раньше. До сих пор мне удалось получить первые слова, но получил stucked:Сравните первое слово каждой строки и замените оператор if (Python)

words = [] 
with open('sample.txt','rw') as f: 
    for line in f: 
     words.append(line.split(None, 1)[0]) 
    print(words) 

В примере, у меня есть текстовый файл, который выглядит примерно так:

Lorem ipsum 
** sit 
amet consectetur 
** adipiscing 
** elit 
** sed do 

Я хочу, чтобы преобразовать его в выглядеть следующим образом:

Lorem ipsum 
Lorem sit 
amet consectetur 
amet adipiscing 
amet elit 
amet sed do 
+0

Вы даже склонны использовать объектно-ориентированное программирование? Или вы хотите, чтобы он работал только на функциях? –

+0

Просто обратите внимание, что ваш метод разделения неверен: split (...) S.split ([sep [, maxsplit]]) -> список строк Возвращает список слов в строке S, используя sep как строка разделителя . Если задано maxsplit, выполняется максимум maxsplit . Если sep не указан или None, любая строка является разделителем, а пустые строки удаляются из результата. –

+3

Надеюсь, модератор посмотрит этот пост. бедный парень получает проголосовать за то, что он недостаточно хорошо знаком с питоном, хотя это основной вопрос. это сообщество становится токсичным. –

ответ

0

Вы можете сделать это:

word="" 
other_file = open("other_file","w") 
with open(some_file) as f: 
    for line in f.readlines(): 
     data = line.split() 
     if data[0] == "**": 
      data[0] = word 
     else: 
      word = data[0] 
     other_file.write(' '.join(data)) 
other_file.close() 
+0

Спасибо за это! Однако он перестает работать после первой строки. – Klajbar

+0

@Klajbar, oops, я забыл добавить цикл. Исправлено. – ForceBru

0

Возможно прочитать первые байты до пространства в строку и сравнить его с .startswith («**», 2). Если true заменить текущим словом (хранится в переменной), в противном случае установите currentWord-Variable на прочитанное слово.

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