2015-09-30 12 views
0

Я делаю упражнение из книги и не могу понять это; это не домашнее задание, я пытаюсь научить себя, и я стараюсь что-нибудь, что я могу придумать, чтобы сделать эту работу!Python Чтение из файла, запись в обратном порядке

Мне нужно прочитать строки из текстового файла, а затем записать строки в новый файл в обратном порядке.

Моя проблема заключается в том, что я могу получить ее в обратном порядке (я предполагаю, что это означает, что последняя строка файла «r» сначала печатается в файле «w»), но также печатает слова, что делает его нечитаемым.

Есть ли способ написать строки в обратном порядке, но строки остаются читаемыми?

Вот что у меня есть:

filetoread = 'yolo.txt' 
file = open(filetoread, 'r') 
words = file.read() 
wrf = 'yip.txt' 
wfile = open(wrf, 'w') 


for lines in reversed(list(words)): 
    print wfile.write(lines) 
+5

Простой: изменение 'file.read()' в 'file.readlines()'. –

+0

Спасибо! Я подумал, что я пропустил что-то простое – xponent

+0

. Также: не забудьте закрыть файлы больше [здесь] (https://docs.python.org/2/tutorial/inputoutput.html) – jlnabais

ответ

3

Вы можете отметить, что, как правило, проще и безопаснее использовать with заявление. Таким образом, вам не нужно беспокоиться об открытии файла и забывать закрыть его. Кроме того, если в блоке with возникает исключение, файл по-прежнему закрывается автоматически; вам нужно будет использовать инструкцию try...finally, чтобы сделать это без with.

Вот ваш пример использования with:

with open('yolo.txt', 'r') as readf, open('yip.txt', 'w') as writef: 
    for line in reversed(readf.readlines()): 
     writef.write(line) 
+0

Или нажимаем работу на сами объекты файлов, заменяя цикл 'for' на' writef.writelines (reverseed (readf.readlines())) ' – ShadowRanger

+2

Хорошая точка. Также стоит отметить, что чтение всего файла в память с помощью 'readlines', вероятно, не является хорошей идеей в целом, если вы не знаете, насколько велика будет файл. – btmcnellis

0

вы имеете в виду что-то вроде

wfile.write("".join(reversed(list(open("some_file.txt"))))) 
+2

Невозможно вызвать 'reverseed' в итераторе файлов. Если бы вы могли, вы могли бы сэкономить еще большую работу с помощью wfile.writelines (reverse (open ("some_file.txt"))), но, к сожалению, это не законно. – ShadowRanger

+0

meh, я думаю, вы могли бы просто обернуть его в список (я отредактировал его, чтобы сделать это) –

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