2012-04-29 4 views
0

Почему я не могу прочитать то, что я только что написал в текстовом файле. Код не показывает никаких ошибок, но я не могу прочитать то, что я только что написал в документе. Если бы кто-то помог мне понять это, это было бы здорово. Я новичок в программировании, кстати так что простите меня, если это простой problem.I я использую Python версии 2.6.1Невозможно прочитать файл

from sys import argv 

script,file_name = argv 
prompt = "> " 

target = open(file_name, 'w+b') 

print "press CRTL-C enter to escape this" 
print "or press RETURN to continue" 

raw_input(prompt) 

print "Begin erasing stuff Goodbye!" 
target.truncate() 

print "we are going to start writing to file" 

write_1 = raw_input(prompt) 
write_2 = raw_input(prompt) 
write_3 = raw_input(prompt) 

target.write(write_1) 
target.write(write_2) 
target.write(write_3) 

print target.read() 


print "closing now!" 
target.close() 

ответ

3

Вам нужно сделать target.seek(0) сбросить указатель файла в начало файла перед тем target.read().

+0

Спасибо, что помогли. – Valleyvizor

2

Следует отметить, что открытие в режиме "w" автоматически обрезает файл, поэтому его можно было бы легче открыть в этом режиме, записать в файл, а затем открыть в режиме "r". Это было вам избежать необходимости укоротить вручную и искать назад:

from sys import argv 

script, file_name = argv 
prompt = "> " 

print("Press CTRL+C to exit,") 
print("or press RETURN to continue.") 

raw_input(prompt) 

print("Begin erasing.") 
with open(file_name, 'wb') as target: 
    print("Begin writing to file.") 
    write_1 = raw_input(prompt) 
    write_2 = raw_input(prompt) 
    write_3 = raw_input(prompt) 
    target.write(write_1) 
    target.write(write_2) 
    target.write(write_3) 

with open(file_name, "rb") as target: 
    print(target.read()) 

Я также использую the with statement для opening files. Это не только больше пифонов и читаемо, но и ручки закрываются для вас, даже когда происходят исключения.

Стоит отметить, что на данный момент это дает вам вывод, который находится на одной строке, поскольку записи не добавляют новую строку, а raw_input() не дает вам новую строку, которая заставила его продолжить. Таким образом, вы, вероятно, хотите, чтобы добавить их в Мы также можем просто использовать один write() команды с одной строкой каскадного из всех наших ввода:.

print("we are going to start writing to file") 
data = [raw_input(prompt) for _ in range(3)] 
target.write("\n".join(data)) 

Здесь я использую a list comprehension для создания списка ввода линий. Это означает, что нам не нужно записывать line_x = raw_input(prompt) нагрузку раз, и мы можем легко изменить количество строк, которые мы хотим использовать. Это также означает, что мы можем легко использовать str.join(), чтобы добавить новые строки, которые мы хотели.

+0

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

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