Поведение метода 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)