Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Python_самоучитель.pdf
Скачиваний:
1350
Добавлен:
29.03.2015
Размер:
835.6 Кб
Скачать

Ревизия: 226

Глава 11. Файлы и обработка исключений

 

 

 

f1.close()

f2.close() return

The continue statement ends the current iteration of the loop, but continues looping. The flow of execution moves to the top of the loop, checks the condition, and proceeds accordingly.

Оператор continue завершает текущую итерацию цикла, но не завершает цикл. Поток исполнения перемещается в начало цикла, проверяет условие и продолжает вычисления в соответствии с результатом проверки.

Thus, if text is the empty string, the loop exits. If the first character of text is a hash mark, the flow of execution goes to the top of the loop. Only if both conditions fail do we copy text into the new file.

Так, если text содержит пустую строку, цикл завершается. Если первый символ в строке text - диез (# - «решетка»), поток исполнения переходит в начало цикла. Только если не выполняются оба условия, мы копируем text в новый файл.

§11.2. Запись переменных

The argument of write has to be a string, so if we want to put other values in a file, we have to convert them to strings first. The easiest way to do that is with the strfunction:

Аргумент метода write должен быть строкой, так если вы хотите поместить в файл значения других типов, вы должны сначала преобразовать их в строку. Простейший способ воспользоваться функцией str:

>>>x = 52

>>>f.write (str(x))

An alternative is to use the format operator %. When applied to integers, % is the modulus operator. But when the first operand is a string, % is the format operator.

Альтернатива использовать оператор форматирования %. Когда % применяется к целым числам, он возвращает остаток от деления (оператор деления по модулю). Но когда первый оператор строка, % оператор форматирования.

The first operand is the format string, and the second operand is a tuple of expressions. The result is a string that contains the values of the expressions, formatted according to the format string.

Первый оператор форматирующая строка, второй оператор - кортеж выражений. Результат - строка, содержащая значения выражений, отформатированных в соответствии с форматирующей строкой.

As a simple example, the format sequence "%d" means that the first expression in the tuple should be formatted as an integer. Here the letter d stands for "decimal":

В качестве простого примера - форматирующая последовательность "%d" означает, что первое выражение в кортеже должно быть отформатировано как целое число. Здесь буква d означает «decimal» - десятичный.

NOTE: Судя по всему, должна существовать форматирующая последовательность для чисел в других системах счисления.

>>>cars = 52

>>>"%d" % cars

'52'

The result is the string '52', which is not to be confused with the integer value 52. Результат - строка '52', которую не следует путать с целым числом 52.

112

Ревизия: 226

Глава 11. Файлы и обработка исключений

 

 

 

A format sequence can appear anywhere in the format string, so we can embed a value in a sentence:

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

>>>cars = 52

>>>"In July we sold %d cars." % cars 'In July we sold 52 cars.'

The format sequence "%f" formats the next item in the tuple as a floating-point number, and "%s" formats the next item as a string:

Форматирующая последовательность "%f" форматирует следующий элемент в кортеже как число с плавающей точкой, а "%s" как строку:

>>> "In %d days we made %f million %s." % (34, 6.1, 'dollars') 'In 34 days we made 6.100000 million dollars.'

By default, the floating-point format prints six decimal places.

По умолчанию, формат чисел с плавающей точкой предоставляет шесть разрядов после запятой.

NOTE: У всего человечества исповедующего демократические ценности в десятичных дробях разделитель - точка. У нас же запятая, поэтому не понятно, что писать «числа с плавающей запятой» или «шесть разрядов после десятичной точки»?

The number of expressions in the tuple has to match the number of format sequences in the string. Also, the types of the expressions have to match the format sequences:

Количество выражений в кортеже должно соответствовать числу форматирующих последовательностей в строке. Также тип выражений должен соответствовать форматирующим последовательностям:

>>> "%d %d %d" % (1,2)

TypeError: not enough arguments for format string

>>> "%d" % 'dollars'

TypeError: illegal argument type for built-in operation

In the first example, there aren't enough expressions; in the second, the expression is the wrong type.

В первом примере не хватает выражений, во втором - не правильный тип выражения.

For more control over the format of numbers, we can specify the number of digits as part of the format sequence:

Мы можем дополнительно управлять форматом чисел, устанавливая, как часть форматирующей последовательности, количество выводимых цифр:

>>>"%6d" % 62 ' 62'

>>>"%12f" % 6.1 ' 6.100000'

The number after the percent sign is the minimum number of spaces the number will take up. If the value provided takes fewer digits, leading spaces are added. If the number of spaces is negative, trailing spaces are added:

Число после знака процента - минимальное количество знакомест, которое будет занято. Если предоставляемое значение занимает только несколько цифр, добавляются

113

Ревизия: 226 Глава 11. Файлы и обработка исключений

лидирующие пробелы. Если число выводимых цифр отрицательно, добавляются замыкающие пробелы:

>>> "%-6d" % 62 '62 '

For floating-point numbers, we can also specify the number of digits after the decimal point:

Для чисел с плавающей точкой, мы так же можем определить число цифр после десятичной точки:

>>> "%12.2f" % 6.1

'6.10'

In this example, the result takes up twelve spaces and includes two digits after the decimal. This format is useful for printing dollar amounts with the decimal points aligned.

В примере результат занимает двенадцать знакомест и включает две цифры после десятичной точки. Этот формат полезен для печати сумм в долларах, выровненных по десятичной точке.

NOTE: Суммы в рублях тоже не плохо печатаются :) Только вот знакомест формат в примере занимает не 12 а 13 (десятичная точка), впрочем автор говорит о цифрах...

For example, imagine a dictionary that contains student names as keys and hourly wages as values. Here is a function that prints the contents of the dictionary as a formatted report:

Например вообразим словарь, который содержит - имена студентов в качестве ключей и почасовую оплату в качестве значений. Функция report распечатывает содержимое словаря как отформатированный отчет:

def report (wages) : students = wages.keys() students.sort()

for student in students :

print "%-20s %12.02f" % (student, wages[student])

To test this the function, we'll create a small dictionary and print the contents:

Для проверки этой функции создадим маленький словарь и распечатаем содержимое:

>>>wages = {'mary': 6.23, 'joe': 5.45, 'joshua': 4.25}

>>>report (wages)

joe

5.45

joshua

4.25

mary

6.23

By controlling the width of each value, we guarantee that the columns will line up, as long as the names contain fewer than twenty-one characters and the wages are less than one billion dollars an hour.

Задавая ширину каждого значения, мы гарантируем, что столбцы будут выровнены до тех пор, пока имя содержит менее двадцати одного символа и почасовая оплата менее одного миллиарда долларов.

Выводимая в примере таблица будет выглядеть выровненной при условии использования моноширного шрифта, например Courier New или Terminal.

114

Ревизия: 226

Глава 11. Файлы и обработка исключений

 

 

 

§11.3. Директории

When you create a new file by opening it and writing, the new file goes in the current directory (wherever you were when you ran the program). Similarly, when you open a file for reading, Python looks for it in the current directory.

Когда вы создаете новый файл, открывая и записывая его, новый файл направляется в текущую директорию (ту, где вы находились, когда запускали программу). Аналогично, когда вы открываете файл для чтения, Питон ищет его в текущей директории.

If you want to open a file somewhere else, you have to specify the path to the file, which is the name of the directory (or folder) where the file is located:

Если вы желаете открыть файл где-либо в другом месте, вы должны указать путь к файлу, который содержит имя директории (или папки) в которой располагается файл:

>>>f = open("/usr/share/dict/words","r")

>>>print f.readline()

Aarhus

This example opens a file named words that resides in a directory named dict, which resides in share, which resides in usr, which resides in the top-level directory of the system, called /.

В примере открывается файл с именем words, который находится в директории с именем dict, которая находится в share, которая в свою очередь находится в usr, usr находится в корневой директории системы, названной / - root, корень.

You cannot use / as part of a filename; it is reserved as a delimiter between directory and filenames.

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

The file /usr/share/dict/words contains a list of words in alphabetical order, of which the first is the name of a Danish university.

Файл /usr/share/dict/words содержит список слов в алфавитном порядке, первое - имя Датского университета.

Действительно, по указанному пути существует файл words, ссылка на файл linux.words, первые три слова Aarhus, Aaron, Ababa...

§11.4. Pickling

In order to put values into a file, you have to convert them to strings. You have already seen how to do that with str:

Чтобы записать значение в файл, вы должны преобразовать его в строку. Вы совсем недавно видели, как это сделать с функцией str:

>>>f.write (str(12.3))

>>>f.write (str([1,2,3]))

The problem is that when you read the value back, you get a string. The original type information has been lost. In fact, you can't even tell where one value ends and the next begins:

Когда вы считываете записанные значения обратно, возникает проблема, вы получаете строку. Начальная информация о типе значения теряется. Фактически, вы даже не можете сказать, где заканчивается одно значение и начинается другое:

>>> f.readline() '12.3[1, 2, 3]'

115

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]