2013-09-08 6 views
2

Я пытаюсь узнать больше о python и написал простой скрипт, но я не могу заставить функцию read() работать. Что мне не хватает? Сообщение об ошибке я получаю:Newbie Python Script - read()

Traceback (самый последний вызов последнего): Файл "ex16demo.py", строка 28, в печати glist.read() IOError: Файл не открыт для чтения

I файл должен быть открытым и присвоен переменной glist.

from sys import argv 

script, filename = argv 

print "We are creating a new grocery list!" 

print "Opening %r..." % filename 
glist = open(filename, 'w') 

print "Deleting previous content from %r......" % filename 
glist.truncate() 

print "Add your items now:" 
item1 = raw_input("item 1:") 
item2 = raw_input("item 2:") 
item3 = raw_input("item 3:") 

print "Adding your items to the list...." 
glist.write(item1) 
glist.write("\n") 
glist.write(item2) 
glist.write("\n") 
glist.write(item3) 
glist.write("\n") 

print "Here are the items in your grocery list:" 

print glist.read() 

Спасибо!

ответ

1

«W» в glist = open(filename, 'w') означает, что вы открываете файл в режиме «write». Вам нужно будет close() и заново открыть его в режиме «чтения» (open(filename, 'r')), чтобы распечатать содержимое.

+0

Я думаю, вы имели в виду 'open (filename, 'r')' для примера режима чтения. – Shashank

+0

@ShashankGupta Спасибо! –

4

Файл открыт для письма (см. open(filename, 'w')).

Закройте файл, откройте его для чтения, а затем вызвать read():

glist.close() 

glist = open(filename, 'r') 
print glist.read() 

Или, вы можете открыть файл в режиме r+ читать и писать без повторного открытия (спасибо @ sberry замечания).

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

with open(filename, 'r+'): 

    print "Deleting previous content from %r......" % filename 
    glist.truncate() 

    ... 

    print glist.read() 

Смотрите также:

+0

Спасибо! Имеют смысл. Я попробовал первый вариант, но я буду смотреть на опции «r +» или «w +». – user2565554