2014-11-04 3 views
0

Может кто-нибудь, пожалуйста, помогите мне с этим? Вот что поставило Grok обучения:Grok Learning Python 3.3 Файлы

Вы работали трудно писать письмо к вашей переписке, только чтобы понять, что ваша собаке были «помогать» и вносит свой вклад в письмо тоже! Вы заметили, что каждая строка начинается с WOOF! и включает в себя вещи, которые вы просто не писали!

Напишите программу для чтения в строках из файла letter.txt и напишите новый файл fixed.txt, который содержит единственные строки, которые не начинаются с WOOF !.

Например, учитывая следующее: letter.txt

Мой огород растет очень хорошо!
WOOF! Поиграем!
Помидоры и огурцы почти готовы к употреблению.
Как идет ваш сад?
WOOF! Я лучше преследую этот опоссум!

ваша программа должна создать файл, который содержит fixed.txt:

Мой огород растет очень хорошо!
Помидоры и огурцы почти готовы к употреблению.
Как идет ваш сад?

Мой текущий код (я буду продолжать пытаться, и редактирование будет держать вас, ребята, которые разместил.):

open("letter.txt").read() 
line = letter.txt.split() 
if line.startswith("WOOF!"): 
    print("") 
else: 
    print(letter.txt) 
letter.txt.close() 

Любая помощь будет принята с благодарностью. Заранее спасибо!

+0

Пожалуйста, покажите нам свой существующий код. У вас проблемы с открытием файла? Чтение файла?Использование 'startswith'? – Matthias

+0

Легко читать текстовые файлы по строкам в Python. Также легко написать строку в другой текстовый файл, который был открыт для записи. После того, как вы прочитаете строку из файла, это строковый объект/переменная. Существует метод 'line.startswith ('xxx')' строкового объекта, который можно использовать для тестирования. – pepr

+0

С подсказками @ pepr вам нужно только 4 правильно отформатированных линий. –

ответ

0

ОК, вы работаете над этим, поэтому я дам вам решение. Вы все еще не программируете, но угадываете синтаксис, чтобы вы могли проверить official tutorial.

Сначала мы собираемся открыть оба файла. По умолчанию открывается файл для чтения. Это нормально для исходного файла, но не для целевого файла, поэтому мы используем mode='w', чтобы разрешить запись.

Затем мы перебираем каждую строку в исходном файле, проверяем, начинается ли строка wirh 'WOOF!', и если это не так, мы собираемся написать строку в файл цели. Цикл будет остановлен, когда будут прочитаны все строки из исходного файла.

После цикла мы закрываем оба файла.

def main(): 
    source_file = open('letter.txt', encoding='UTF-8') 
    target_file = open('fixed.txt', mode='w', encoding='UTF-8') 

    for line in source_file: 
     if not line.startswith('WOOF!'): 
      target_file.write(line) 

    source_file.close() 
    target_file.close() 

if __name__ == '__main__': 
    main() 

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

 with open('letter.txt', encoding='UTF-8') as source_file, open('fixed_alt.txt', mode='w', encoding='UTF-8') as target_file: 
     for line in source_file: 
      if not line.startswith('WOOF!'): 
       target_file.write(line) 

Файлы будут закрыты, когда with блок остается.

+0

Для новичков я бы оставил 'def main():' и последний 'if' out. Это просто усложняет понимание. – pepr

+0

Огромное спасибо @Matthias и другим, кто помог отредактировать, я бы поднял ваш ответ, но мне не хватает репутации –

+0

@pepr: Вы правы. Я должен был упомянуть цель 'if __name__ == '__main __':' в ответе. Краткое объяснение. Это предотвращает запуск кода при импорте файла. – Matthias

0
with open('letter.txt','r') as f: 
with open('fixed.txt','w') as i: 

    for line in f: 
    if 'WOOF!' not in line: 
     print(line.strip(), file=i) 

Мой ответ

0
with open('letter.txt') as fin, open('fixed.txt', 'w') as fout: 
    for line in fin: 
    if not line.startswith('WOOF!'): 
     fout.write(line) 
+2

Пожалуйста, добавьте больше описания и/или информации о вашем ответе и о том, как он решает заданную проблему, чтобы другие могли легко понять это, не прося разъяснений – koceeng