Поведение метода truncate() в Python
Это упражнение 16 из учебников Python Зеда шоу. Мне трудно понять, что именно truncate
функция делает в этом случае. Логика в том, что мы открываем файл и затем...сократить его? За что? Что именно здесь происходит?
from sys import argv
script, filename = argv
print "We're going to erase %r." % filename
print "If you don't want that, hit CTRL-C (^C)."
print "If you do want that, hit RETURN."
raw_input("?")
print "Opening the file..."
target = open(filename, 'w')
print "Truncating the file. Goodbye!"
target.truncate()
print "Now I'm going to ask you for three lines."
line1 = raw_input("line 1: ")
line2 = raw_input("line 2: ")
line3 = raw_input("line 3: ")
print "I'm going to write these to the file."
target.write(line1 + "n" + line2 + "n" + line3 + "n")
print "And finally, we close it."
target.close()
2 ответов
вы правы, что подозреваете.
во-первых,file.truncate
это:
усечь размер файла. Если параметр в размере аргумент присутствует, файл усекается до (не более) этого размера. Размер по умолчанию равен текущей позиции...
не совсем то же самое, что описание Zed-он только "опустошает файл", если текущая позиция является началом файла,но так как мы только что открыли файл (а не в a
mode), текущая позиция является началом, поэтому это не имеет значения. Мы сокращаем до пустого файла.
что все хорошо и хорошо, кроме этого open
уже делает это:
наиболее часто используемые значения режима являются
'r'
для чтения,'w'
для записи (усечение файла, если он уже существует)...
Итак, мы открываем файл, создавая его, если он не существует, и усекая его до 0 байт, если он существует. Затем в следующей строке мы усекаем его до 0 байт.
(это " усечение файла. До свидания!- сообщение вводит в заблуждение, поскольку мы его уже усекли. Представьте, что вы поставили точку останова на этой строке и решили убить программу перед ее выполнением...)
но обратите внимание, что это не какая-то глупая ошибка Зеда; он, похоже, сделал это специально, чтобы сделать точку в учебном упражнении № 5:
если открыть файл с помощью
'w'
режим, то вы действительно нужноtarget.truncate()
? Прочитайте документацию для Python
в настоящее время я просматриваю книгу Зеда шоу. Часто. когда он дает вам такие проблемы, он заставляет вас возиться с различными элементами вашего кода, чтобы увидеть, что они делают. Не стесняйтесь удалять такие вещи, как target.truncate () и повторно запустите программу. Как говорит абарнерт, есть способ сделать усечение только удалить часть файла. Оставляя эту дыру в ваших знаниях о том, как получить разные результаты с этими двумя вариантами, вы должны раздражать вас некоторые независимые исследования. Это очень эффективный способ заразить читателя любопытством. Посмотрите, как append работает в Python и посмотрите, можете ли вы сделать truncate() удалить только последнюю строку тестового файла. Не бойтесь нарушить свой код. "Если вы хотите увеличить свою успешность, удвоьте свою неудачу. Уотсон, бывший генеральный директор IBM)