@@ -12,7 +12,7 @@ msgid ""
1212msgstr ""
1313"Project-Id-Version : Python 3.14\n "
1414"Report-Msgid-Bugs-To : \n "
15- "POT-Creation-Date : 2025-12-07 14:13 +0000\n "
15+ "POT-Creation-Date : 2025-12-09 14:17 +0000\n "
1616"PO-Revision-Date : 2025-09-16 00:02+0000\n "
1717"Last-Translator : Dmitry Luschan, 2025\n "
1818"Language-Team : Russian (https://app.transifex.com/python-doc/teams/5390/ru/)\n "
@@ -210,6 +210,12 @@ msgid ""
210210":meth:`~string.Template.safe_substitute` method may be more appropriate --- "
211211"it will leave placeholders unchanged if data is missing::"
212212msgstr ""
213+ "Метод :meth:`~string.Template.substitute` выбрасывает исключение "
214+ ":exc:`KeyError`, когда заполнитель не предоставлен в словаре или именованном"
215+ " аргументе. Для приложений вроде массовой рассылки, где предоставленные "
216+ "пользователем данные могут быть неполными, метод "
217+ ":meth:`~string.Template.safe_substitute` может быть более подходящим — он "
218+ "оставит заполнители без изменений, если данные отсутствуют::"
213219
214220#: ../../tutorial/stdlib2.rst:94
215221msgid ""
@@ -222,6 +228,14 @@ msgid ""
222228">>> t.safe_substitute(d)\n"
223229"'Return the unladen swallow to $owner.'"
224230msgstr ""
231+ ">>> t = Template('$item возвращается $owner.')\n"
232+ ">>> d = dict(item='Незагруженная ласточка')\n"
233+ ">>> t.substitute(d)\n"
234+ "Traceback (most recent call last):\n"
235+ " ...\n"
236+ "KeyError: 'owner'\n"
237+ ">>> t.safe_substitute(d)\n"
238+ "'Незагруженная ласточка возвращается $owner.'"
225239
226240#: ../../tutorial/stdlib2.rst:103
227241msgid ""
@@ -230,6 +244,10 @@ msgid ""
230244"placeholders such as the current date, image sequence number, or file "
231245"format::"
232246msgstr ""
247+ "Подклассы Template могут задавать собственный разделитель. Например, утилита"
248+ " пакетного переименования для браузера фотографий может использовать знак "
249+ "процента для заполнителей, таких как текущая дата, номер изображения в "
250+ "последовательности или формат файла::"
233251
234252#: ../../tutorial/stdlib2.rst:107
235253msgid ""
@@ -252,17 +270,38 @@ msgid ""
252270"img_1076.jpg --> Ashley_1.jpg\n"
253271"img_1077.jpg --> Ashley_2.jpg"
254272msgstr ""
273+ ">>> import time, os.path\n"
274+ ">>> photofiles = ['img_1074.jpg', 'img_1076.jpg', 'img_1077.jpg']\n"
275+ ">>> class BatchRename(Template):\n"
276+ "... delimiter = '%'\n"
277+ "...\n"
278+ ">>> fmt = input('Введите стиль переименования (%d-дата %n-номер %f-формат): ')\n"
279+ "Введите стиль переименования (%d-дата %n-номер %f-формат): Эшли_%n%f\n"
280+ "\n"
281+ ">>> t = BatchRename(fmt)\n"
282+ ">>> date = time.strftime('%d%b%y')\n"
283+ ">>> for i, filename in enumerate(photofiles):\n"
284+ "... base, ext = os.path.splitext(filename)\n"
285+ "... newname = t.substitute(d=date, n=i, f=ext)\n"
286+ "... print('{0} --> {1}'.format(filename, newname))\n"
287+ "\n"
288+ "img_1074.jpg --> Эшли_0.jpg\n"
289+ "img_1076.jpg --> Эшли_1.jpg\n"
290+ "img_1077.jpg --> Эшли_2.jpg"
255291
256292#: ../../tutorial/stdlib2.rst:126
257293msgid ""
258294"Another application for templating is separating program logic from the "
259295"details of multiple output formats. This makes it possible to substitute "
260296"custom templates for XML files, plain text reports, and HTML web reports."
261297msgstr ""
298+ "Ещё одно применение для шаблонов — отделение логики программы от деталей "
299+ "множества выходных форматов. Это позволяет подставлять собственные шаблоны "
300+ "для XML-файлов, текстовых отчётов и HTML-страниц."
262301
263302#: ../../tutorial/stdlib2.rst:134
264303msgid "Working with Binary Data Record Layouts"
265- msgstr ""
304+ msgstr "Работа с записями бинарных данных "
266305
267306#: ../../tutorial/stdlib2.rst:136
268307msgid ""
@@ -274,6 +313,13 @@ msgid ""
274313"respectively. The ``\" <\" `` indicates that they are standard size and in "
275314"little-endian byte order::"
276315msgstr ""
316+ "Модуль :mod:`struct` предоставляет функции :func:`~struct.pack` и "
317+ ":func:`~struct.unpack` для работы с записями переменной длины в бинарном "
318+ "формате. Следующий пример показывает, как пройтись по заголовкам файлов в "
319+ "ZIP-архиве без использования модуля :mod:`zipfile`. Коды упаковки ``\" H\" `` "
320+ "и ``\" I\" `` обозначают двухбайтовые и четырехбайтовые беззнаковые числа "
321+ "соответственно. Символ ``\" <\" `` указывает, что они имеют стандартный "
322+ "размер, а порядок байтов — little-endian::"
277323
278324#: ../../tutorial/stdlib2.rst:144
279325msgid ""
@@ -296,10 +342,28 @@ msgid ""
296342"\n"
297343" start += extra_size + comp_size # skip to the next header"
298344msgstr ""
345+ "import struct\n"
346+ "\n"
347+ "with open('myfile.zip', 'rb') as f:\n"
348+ " data = f.read()\n"
349+ "\n"
350+ "start = 0\n"
351+ "for i in range(3): # показать заголовки первых трёх файлов\n"
352+ " start += 14\n"
353+ " fields = struct.unpack('<IIIHH', data[start:start+16])\n"
354+ " crc32, comp_size, uncomp_size, filenamesize, extra_size = fields\n"
355+ "\n"
356+ " start += 16\n"
357+ " filename = data[start:start+filenamesize]\n"
358+ " start += filenamesize\n"
359+ " extra = data[start:start+extra_size]\n"
360+ " print(filename, hex(crc32), comp_size, uncomp_size)\n"
361+ "\n"
362+ " start += extra_size + comp_size # перейти к следующему заголовку"
299363
300364#: ../../tutorial/stdlib2.rst:167
301365msgid "Multi-threading"
302- msgstr ""
366+ msgstr "Многопоточность "
303367
304368#: ../../tutorial/stdlib2.rst:169
305369msgid ""
0 commit comments