-
-
Notifications
You must be signed in to change notification settings - Fork 80
/
Copy pathinputoutput.po
583 lines (514 loc) · 31.2 KB
/
inputoutput.po
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2001-2023, Python Software Foundation
# This file is distributed under the same license as the Python package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
# Translators:
# Rafael Fontenelle <rffontenelle@gmail.com>, 2023
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Python 3.10\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-07-29 03:05+0000\n"
"PO-Revision-Date: 2022-11-05 17:23+0000\n"
"Last-Translator: Rafael Fontenelle <rffontenelle@gmail.com>, 2023\n"
"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: ../../tutorial/inputoutput.rst:5
msgid "Input and Output"
msgstr "输入与输出"
#: ../../tutorial/inputoutput.rst:7
msgid ""
"There are several ways to present the output of a program; data can be "
"printed in a human-readable form, or written to a file for future use. This "
"chapter will discuss some of the possibilities."
msgstr "程序输出有几种显示方式;数据既可以输出供人阅读的形式,也可以写入文件备用。本章探讨一些可用的方式。"
#: ../../tutorial/inputoutput.rst:15
msgid "Fancier Output Formatting"
msgstr "更复杂的输出格式"
#: ../../tutorial/inputoutput.rst:17
msgid ""
"So far we've encountered two ways of writing values: *expression statements*"
" and the :func:`print` function. (A third way is using the :meth:`write` "
"method of file objects; the standard output file can be referenced as "
"``sys.stdout``. See the Library Reference for more information on this.)"
msgstr ""
"至此,我们已学习了两种写入值的方法:*表达式语句* 和 :func:`print` 函数。第三种方法是使用文件对象的 :meth:`write` "
"方法;标准输出文件称为 ``sys.stdout``。详见标准库参考。"
#: ../../tutorial/inputoutput.rst:22
msgid ""
"Often you'll want more control over the formatting of your output than "
"simply printing space-separated values. There are several ways to format "
"output."
msgstr "对输出格式的控制不只是打印空格分隔的值,还需要更多方式。格式化输出包括以下几种方法。"
#: ../../tutorial/inputoutput.rst:25
msgid ""
"To use :ref:`formatted string literals <tut-f-strings>`, begin a string with"
" ``f`` or ``F`` before the opening quotation mark or triple quotation mark. "
"Inside this string, you can write a Python expression between ``{`` and "
"``}`` characters that can refer to variables or literal values."
msgstr ""
"使用 :ref:`格式化字符串字面值 <tut-f-strings>` ,要在字符串开头的引号/三引号前添加 ``f`` 或 ``F`` "
"。在这种字符串中,可以在 ``{`` 和 ``}`` 字符之间输入引用的变量,或字面值的 Python 表达式。"
#: ../../tutorial/inputoutput.rst:37
msgid ""
"The :meth:`str.format` method of strings requires more manual effort. "
"You'll still use ``{`` and ``}`` to mark where a variable will be "
"substituted and can provide detailed formatting directives, but you'll also "
"need to provide the information to be formatted."
msgstr ""
"字符串的 :meth:`str.format` 方法需要更多手动操作。该方法也用 ``{`` 和 ``}`` "
"标记替换变量的位置,虽然这种方法支持详细的格式化指令,但需要提供格式化信息。"
#: ../../tutorial/inputoutput.rst:50
msgid ""
"Finally, you can do all the string handling yourself by using string slicing"
" and concatenation operations to create any layout you can imagine. The "
"string type has some methods that perform useful operations for padding "
"strings to a given column width."
msgstr "最后,还可以用字符串切片和合并操作完成字符串处理操作,创建任何排版布局。字符串类型还支持将字符串按给定列宽进行填充,这些方法也很有用。"
#: ../../tutorial/inputoutput.rst:55
msgid ""
"When you don't need fancy output but just want a quick display of some "
"variables for debugging purposes, you can convert any value to a string with"
" the :func:`repr` or :func:`str` functions."
msgstr "如果不需要花哨的输出,只想快速显示变量进行调试,可以用 :func:`repr` 或 :func:`str` 函数把值转化为字符串。"
#: ../../tutorial/inputoutput.rst:59
msgid ""
"The :func:`str` function is meant to return representations of values which "
"are fairly human-readable, while :func:`repr` is meant to generate "
"representations which can be read by the interpreter (or will force a "
":exc:`SyntaxError` if there is no equivalent syntax). For objects which "
"don't have a particular representation for human consumption, :func:`str` "
"will return the same value as :func:`repr`. Many values, such as numbers or"
" structures like lists and dictionaries, have the same representation using "
"either function. Strings, in particular, have two distinct representations."
msgstr ""
":func:`str` 函数返回供人阅读的值,:func:`repr` 则生成适于解释器读取的值(如果没有等效的语法,则强制执行 "
":exc:`SyntaxError`)。对于没有支持供人阅读展示结果的对象, :func:`str` 返回与 :func:`repr` "
"相同的值。一般情况下,数字、列表或字典等结构的值,使用这两个函数输出的表现形式是一样的。字符串有两种不同的表现形式。"
#: ../../tutorial/inputoutput.rst:68
msgid "Some examples::"
msgstr "示例如下:"
#: ../../tutorial/inputoutput.rst:91
msgid ""
"The :mod:`string` module contains a :class:`~string.Template` class that "
"offers yet another way to substitute values into strings, using placeholders"
" like ``$x`` and replacing them with values from a dictionary, but offers "
"much less control of the formatting."
msgstr ""
":mod:`string` 模块包含 :class:`~string.Template` 类,提供了将值替换为字符串的另一种方法。该类使用 ``$x``"
" 占位符,并用字典的值进行替换,但对格式控制的支持比较有限。"
#: ../../tutorial/inputoutput.rst:100
msgid "Formatted String Literals"
msgstr "格式化字符串字面值"
#: ../../tutorial/inputoutput.rst:102
msgid ""
":ref:`Formatted string literals <f-strings>` (also called f-strings for "
"short) let you include the value of Python expressions inside a string by "
"prefixing the string with ``f`` or ``F`` and writing expressions as "
"``{expression}``."
msgstr ""
":ref:`格式化字符串字面值 <f-strings>` (简称为 f-字符串)在字符串前加前缀 ``f`` 或 ``F``,通过 "
"``{expression}`` 表达式,把 Python 表达式的值添加到字符串内。"
#: ../../tutorial/inputoutput.rst:107
msgid ""
"An optional format specifier can follow the expression. This allows greater "
"control over how the value is formatted. The following example rounds pi to "
"three places after the decimal::"
msgstr "格式说明符是可选的,写在表达式后面,可以更好地控制格式化值的方式。下例将 pi 舍入到小数点后三位:"
#: ../../tutorial/inputoutput.rst:115
msgid ""
"Passing an integer after the ``':'`` will cause that field to be a minimum "
"number of characters wide. This is useful for making columns line up. ::"
msgstr "在 ``':'`` 后传递整数,为该字段设置最小字符宽度,常用于列对齐:"
#: ../../tutorial/inputoutput.rst:126
msgid ""
"Other modifiers can be used to convert the value before it is formatted. "
"``'!a'`` applies :func:`ascii`, ``'!s'`` applies :func:`str`, and ``'!r'`` "
"applies :func:`repr`::"
msgstr ""
"还有一些修饰符可以在格式化前转换值。 ``'!a'`` 应用 :func:`ascii` ,``'!s'`` 应用 "
":func:`str`,``'!r'`` 应用 :func:`repr`:"
#: ../../tutorial/inputoutput.rst:136
msgid ""
"The ``=`` specifier can be used to expand an expression to the text of the "
"expression, an equal sign, then the representation of the evaluated "
"expression:"
msgstr "``=`` 说明符可被用于将一个表达式扩展为表达式文本、等号再加表达式求值结果的形式。"
#: ../../tutorial/inputoutput.rst:145
msgid ""
"See :ref:`self-documenting expressions <bpo-36817-whatsnew>` for more "
"information on the ``=`` specifier. For a reference on these format "
"specifications, see the reference guide for the :ref:`formatspec`."
msgstr ""
"请参阅 :ref:`自说明型表达式 <bpo-36817-whatsnew>` 以了解 ``=`` 说明符的更多信息。 "
"有关这些格式说明的详情,请查看针对 :ref:`formatspec` 的参考指南。"
#: ../../tutorial/inputoutput.rst:152
msgid "The String format() Method"
msgstr "字符串 format() 方法"
#: ../../tutorial/inputoutput.rst:154
msgid "Basic usage of the :meth:`str.format` method looks like this::"
msgstr ":meth:`str.format` 方法的基本用法如下所示:"
#: ../../tutorial/inputoutput.rst:159
msgid ""
"The brackets and characters within them (called format fields) are replaced "
"with the objects passed into the :meth:`str.format` method. A number in the"
" brackets can be used to refer to the position of the object passed into the"
" :meth:`str.format` method. ::"
msgstr ""
"花括号及之内的字符(称为格式字段)被替换为传递给 :meth:`str.format` 方法的对象。花括号中的数字表示传递给 "
":meth:`str.format` 方法的对象所在的位置。"
#: ../../tutorial/inputoutput.rst:169
msgid ""
"If keyword arguments are used in the :meth:`str.format` method, their values"
" are referred to by using the name of the argument. ::"
msgstr ":meth:`str.format` 方法中使用关键字参数名引用值。"
#: ../../tutorial/inputoutput.rst:176
msgid "Positional and keyword arguments can be arbitrarily combined::"
msgstr "位置参数和关键字参数可以任意组合:"
#: ../../tutorial/inputoutput.rst:182
msgid ""
"If you have a really long format string that you don't want to split up, it "
"would be nice if you could reference the variables to be formatted by name "
"instead of by position. This can be done by simply passing the dict and "
"using square brackets ``'[]'`` to access the keys. ::"
msgstr ""
"如果不想分拆较长的格式字符串,最好按名称引用变量进行格式化,不要按位置。这项操作可以通过传递字典,并用方括号 ``'[]'`` 访问键来完成。"
#: ../../tutorial/inputoutput.rst:192
msgid ""
"This could also be done by passing the ``table`` dictionary as keyword "
"arguments with the ``**`` notation. ::"
msgstr "这也可以通过将 ``table`` 字典作为采用 ``**`` 标记的关键字参数传入来实现。 ::"
#: ../../tutorial/inputoutput.rst:199
msgid ""
"This is particularly useful in combination with the built-in function "
":func:`vars`, which returns a dictionary containing all local variables."
msgstr "与内置函数 :func:`vars` 结合使用时,这种方式非常实用,可以返回包含所有局部变量的字典。"
#: ../../tutorial/inputoutput.rst:202
msgid ""
"As an example, the following lines produce a tidily aligned set of columns "
"giving integers and their squares and cubes::"
msgstr "举个例子,以下几行代码将产生一组整齐的数据列,包含给定的整数及其平方与立方::"
#: ../../tutorial/inputoutput.rst:219
msgid ""
"For a complete overview of string formatting with :meth:`str.format`, see "
":ref:`formatstrings`."
msgstr ":meth:`str.format` 进行字符串格式化的完整概述详见 :ref:`formatstrings` 。"
#: ../../tutorial/inputoutput.rst:224
msgid "Manual String Formatting"
msgstr "手动格式化字符串"
#: ../../tutorial/inputoutput.rst:226
msgid "Here's the same table of squares and cubes, formatted manually::"
msgstr "下面是使用手动格式化方式实现的同一个平方和立方的表:"
#: ../../tutorial/inputoutput.rst:244
msgid ""
"(Note that the one space between each column was added by the way "
":func:`print` works: it always adds spaces between its arguments.)"
msgstr "(注意,每列之间的空格是通过使用 :func:`print` 添加的:它总在其参数间添加空格。)"
#: ../../tutorial/inputoutput.rst:247
msgid ""
"The :meth:`str.rjust` method of string objects right-justifies a string in a"
" field of a given width by padding it with spaces on the left. There are "
"similar methods :meth:`str.ljust` and :meth:`str.center`. These methods do "
"not write anything, they just return a new string. If the input string is "
"too long, they don't truncate it, but return it unchanged; this will mess up"
" your column lay-out but that's usually better than the alternative, which "
"would be lying about a value. (If you really want truncation you can always "
"add a slice operation, as in ``x.ljust(n)[:n]``.)"
msgstr ""
"字符串对象的 :meth:`str.rjust` 方法通过在左侧填充空格,对给定宽度字段中的字符串进行右对齐。同类方法还有 "
":meth:`str.ljust` 和 :meth:`str.center` "
"。这些方法不写入任何内容,只返回一个新字符串,如果输入的字符串太长,它们不会截断字符串,而是原样返回;虽然这种方式会弄乱列布局,但也比另一种方法好,后者在显示值时可能不准确(如果真的想截断字符串,可以使用"
" ``x.ljust(n)[:n]`` 这样的切片操作 。)"
#: ../../tutorial/inputoutput.rst:256
msgid ""
"There is another method, :meth:`str.zfill`, which pads a numeric string on "
"the left with zeros. It understands about plus and minus signs::"
msgstr "另一种方法是 :meth:`str.zfill` ,该方法在数字字符串左边填充零,且能识别正负号:"
#: ../../tutorial/inputoutput.rst:268
msgid "Old string formatting"
msgstr "旧式字符串格式化方法"
#: ../../tutorial/inputoutput.rst:270
msgid ""
"The % operator (modulo) can also be used for string formatting. Given "
"``'string' % values``, instances of ``%`` in ``string`` are replaced with "
"zero or more elements of ``values``. This operation is commonly known as "
"string interpolation. For example::"
msgstr ""
"% 运算符(求余符)也可用于字符串格式化。给定 ``'string' % values``,则 ``string`` 中的 ``%`` "
"实例会以零个或多个 ``values`` 元素替换。此操作被称为字符串插值。例如:"
#: ../../tutorial/inputoutput.rst:279
msgid ""
"More information can be found in the :ref:`old-string-formatting` section."
msgstr ":ref:`old-string-formatting` 小节介绍更多相关内容。"
#: ../../tutorial/inputoutput.rst:285
msgid "Reading and Writing Files"
msgstr "读写文件"
#: ../../tutorial/inputoutput.rst:291
msgid ""
":func:`open` returns a :term:`file object`, and is most commonly used with "
"two positional arguments and one keyword argument: ``open(filename, mode, "
"encoding=None)``"
msgstr ""
":func:`open` 返回一个 :term:`file object` ,最常使用的是两个位置参数和一个关键字参数:``open(filename,"
" mode, encoding=None)``"
#: ../../tutorial/inputoutput.rst:304
msgid ""
"The first argument is a string containing the filename. The second argument"
" is another string containing a few characters describing the way in which "
"the file will be used. *mode* can be ``'r'`` when the file will only be "
"read, ``'w'`` for only writing (an existing file with the same name will be "
"erased), and ``'a'`` opens the file for appending; any data written to the "
"file is automatically added to the end. ``'r+'`` opens the file for both "
"reading and writing. The *mode* argument is optional; ``'r'`` will be "
"assumed if it's omitted."
msgstr ""
"第一个实参是文件名字符串。第二个实参是包含描述文件使用方式字符的字符串。*mode* 的值包括 ``'r'`` ,表示文件只能读取;``'w'`` "
"表示只能写入(现有同名文件会被覆盖);``'a'`` 表示打开文件并追加内容,任何写入的数据会自动添加到文件末尾。``'r+'`` "
"表示打开文件进行读写。*mode* 实参是可选的,省略时的默认值为 ``'r'``。"
#: ../../tutorial/inputoutput.rst:313
msgid ""
"Normally, files are opened in :dfn:`text mode`, that means, you read and "
"write strings from and to the file, which are encoded in a specific "
"*encoding*. If *encoding* is not specified, the default is platform "
"dependent (see :func:`open`). Because UTF-8 is the modern de-facto standard,"
" ``encoding=\"utf-8\"`` is recommended unless you know that you need to use "
"a different encoding. Appending a ``'b'`` to the mode opens the file in "
":dfn:`binary mode`. Binary mode data is read and written as :class:`bytes` "
"objects. You can not specify *encoding* when opening file in binary mode."
msgstr ""
"通常情况下,文件是以 :dfn:`text mode` 打开的,也就是说,你从文件中读写字符串,这些字符串是以特定的 *encoding* "
"编码的。如果没有指定 *encoding* ,默认的是与平台有关的(见 :func:`open` )。因为 UTF-8 "
"是现代事实上的标准,除非你知道你需要使用一个不同的编码,否则建议使用 ``encoding=\"utf-8\"`` 。在模式后面加上一个 ``'b'``"
" ,可以用 :dfn:`binary mode` 打开文件。二进制模式的数据是以 :class:`bytes` "
"对象的形式读写的。在二进制模式下打开文件时,你不能指定 *encoding* 。"
#: ../../tutorial/inputoutput.rst:323
msgid ""
"In text mode, the default when reading is to convert platform-specific line "
"endings (``\\n`` on Unix, ``\\r\\n`` on Windows) to just ``\\n``. When "
"writing in text mode, the default is to convert occurrences of ``\\n`` back "
"to platform-specific line endings. This behind-the-scenes modification to "
"file data is fine for text files, but will corrupt binary data like that in "
":file:`JPEG` or :file:`EXE` files. Be very careful to use binary mode when "
"reading and writing such files."
msgstr ""
"在文本模式下读取文件时,默认把平台特定的行结束符(Unix 上为 ``\\n``, Windows 上为 ``\\r\\n``)转换为 "
"``\\n``。在文本模式下写入数据时,默认把 ``\\n`` 转换回平台特定结束符。这种操作方式在后台修改文件数据对文本文件来说没有问题,但会破坏 "
":file:`JPEG` 或 :file:`EXE` 等二进制文件中的数据。注意,在读写此类文件时,一定要使用二进制模式。"
#: ../../tutorial/inputoutput.rst:331
msgid ""
"It is good practice to use the :keyword:`with` keyword when dealing with "
"file objects. The advantage is that the file is properly closed after its "
"suite finishes, even if an exception is raised at some point. Using "
":keyword:`!with` is also much shorter than writing equivalent "
":keyword:`try`\\ -\\ :keyword:`finally` blocks::"
msgstr ""
"在处理文件对象时,最好使用 :keyword:`with` 关键字。优点是,子句体结束后,文件会正确关闭,即便触发异常也可以。而且,使用 "
":keyword:`!with` 相比等效的 :keyword:`try`\\ -\\ :keyword:`finally` 代码块要简短得多:"
#: ../../tutorial/inputoutput.rst:344
msgid ""
"If you're not using the :keyword:`with` keyword, then you should call "
"``f.close()`` to close the file and immediately free up any system resources"
" used by it."
msgstr "如果没有使用 :keyword:`with` 关键字,则应调用 ``f.close()`` 关闭文件,即可释放文件占用的系统资源。"
#: ../../tutorial/inputoutput.rst:349
msgid ""
"Calling ``f.write()`` without using the :keyword:`!with` keyword or calling "
"``f.close()`` **might** result in the arguments of ``f.write()`` not being "
"completely written to the disk, even if the program exits successfully."
msgstr ""
"调用 ``f.write()`` 时,未使用 :keyword:`!with` 关键字,或未调用 "
"``f.close()``,即使程序正常退出,也**可能** 导致 ``f.write()`` 的参数没有完全写入磁盘。"
#: ../../tutorial/inputoutput.rst:357
msgid ""
"After a file object is closed, either by a :keyword:`with` statement or by "
"calling ``f.close()``, attempts to use the file object will automatically "
"fail. ::"
msgstr "通过 :keyword:`with` 语句,或调用 ``f.close()`` 关闭文件对象后,再次使用该文件对象将会失败。"
#: ../../tutorial/inputoutput.rst:371
msgid "Methods of File Objects"
msgstr "文件对象的方法"
#: ../../tutorial/inputoutput.rst:373
msgid ""
"The rest of the examples in this section will assume that a file object "
"called ``f`` has already been created."
msgstr "本节下文中的例子假定已创建 ``f`` 文件对象。"
#: ../../tutorial/inputoutput.rst:376
msgid ""
"To read a file's contents, call ``f.read(size)``, which reads some quantity "
"of data and returns it as a string (in text mode) or bytes object (in binary"
" mode). *size* is an optional numeric argument. When *size* is omitted or "
"negative, the entire contents of the file will be read and returned; it's "
"your problem if the file is twice as large as your machine's memory. "
"Otherwise, at most *size* characters (in text mode) or *size* bytes (in "
"binary mode) are read and returned. If the end of the file has been reached,"
" ``f.read()`` will return an empty string (``''``). ::"
msgstr ""
"``f.read(size)`` 可用于读取文件内容,它会读取一些数据,并返回字符串(文本模式),或字节串对象(在二进制模式下)。 *size* "
"是可选的数值参数。省略 *size* 或 *size* 为负数时,读取并返回整个文件的内容;文件大小是内存的两倍时,会出现问题。*size* "
"取其他值时,读取并返回最多 *size* 个字符(文本模式)或 *size* 个字节(二进制模式)。如已到达文件末尾,``f.read()`` "
"返回空字符串(``''``)。"
#: ../../tutorial/inputoutput.rst:390
msgid ""
"``f.readline()`` reads a single line from the file; a newline character "
"(``\\n``) is left at the end of the string, and is only omitted on the last "
"line of the file if the file doesn't end in a newline. This makes the "
"return value unambiguous; if ``f.readline()`` returns an empty string, the "
"end of the file has been reached, while a blank line is represented by "
"``'\\n'``, a string containing only a single newline. ::"
msgstr ""
"``f.readline()`` "
"从文件中读取单行数据;字符串末尾保留换行符(``\\n``),只有在文件不以换行符结尾时,文件的最后一行才会省略换行符。这种方式让返回值清晰明确;只要 "
"``f.readline()`` 返回空字符串,就表示已经到达了文件末尾,空行使用 ``'\\n'`` 表示,该字符串只包含一个换行符。"
#: ../../tutorial/inputoutput.rst:404
msgid ""
"For reading lines from a file, you can loop over the file object. This is "
"memory efficient, fast, and leads to simple code::"
msgstr "从文件中读取多行时,可以用循环遍历整个文件对象。这种操作能高效利用内存,快速,且代码简单:"
#: ../../tutorial/inputoutput.rst:413
msgid ""
"If you want to read all the lines of a file in a list you can also use "
"``list(f)`` or ``f.readlines()``."
msgstr "如需以列表形式读取文件中的所有行,可以用 ``list(f)`` 或 ``f.readlines()``。"
#: ../../tutorial/inputoutput.rst:416
msgid ""
"``f.write(string)`` writes the contents of *string* to the file, returning "
"the number of characters written. ::"
msgstr "``f.write(string)`` 把 *string* 的内容写入文件,并返回写入的字符数。"
#: ../../tutorial/inputoutput.rst:422
msgid ""
"Other types of objects need to be converted -- either to a string (in text "
"mode) or a bytes object (in binary mode) -- before writing them::"
msgstr "写入其他类型的对象前,要先把它们转化为字符串(文本模式)或字节对象(二进制模式):"
#: ../../tutorial/inputoutput.rst:430
msgid ""
"``f.tell()`` returns an integer giving the file object's current position in"
" the file represented as number of bytes from the beginning of the file when"
" in binary mode and an opaque number when in text mode."
msgstr ""
"``f.tell()`` 返回整数,给出文件对象在文件中的当前位置,表示为二进制模式下时从文件开始的字节数,以及文本模式下的意义不明的数字。"
#: ../../tutorial/inputoutput.rst:434
msgid ""
"To change the file object's position, use ``f.seek(offset, whence)``. The "
"position is computed from adding *offset* to a reference point; the "
"reference point is selected by the *whence* argument. A *whence* value of 0"
" measures from the beginning of the file, 1 uses the current file position, "
"and 2 uses the end of the file as the reference point. *whence* can be "
"omitted and defaults to 0, using the beginning of the file as the reference "
"point. ::"
msgstr ""
"``f.seek(offset, whence)`` 可以改变文件对象的位置。通过向参考点添加 *offset* 计算位置;参考点由 *whence* "
"参数指定。 *whence* 值为 0 时,表示从文件开头计算,1 表示使用当前文件位置,2 表示使用文件末尾作为参考点。省略 *whence* "
"时,其默认值为 0,即使用文件开头作为参考点。"
#: ../../tutorial/inputoutput.rst:453
msgid ""
"In text files (those opened without a ``b`` in the mode string), only seeks "
"relative to the beginning of the file are allowed (the exception being "
"seeking to the very file end with ``seek(0, 2)``) and the only valid "
"*offset* values are those returned from the ``f.tell()``, or zero. Any other"
" *offset* value produces undefined behaviour."
msgstr ""
"在文本文件(模式字符串未使用 ``b`` 时打开的文件)中,只允许相对于文件开头搜索(使用 ``seek(0, 2)`` "
"搜索到文件末尾是个例外),唯一有效的 *offset* 值是能从 ``f.tell()`` 中返回的,或 0。其他 *offset* "
"值都会产生未定义的行为。"
#: ../../tutorial/inputoutput.rst:459
msgid ""
"File objects have some additional methods, such as :meth:`~file.isatty` and "
":meth:`~file.truncate` which are less frequently used; consult the Library "
"Reference for a complete guide to file objects."
msgstr ""
"文件对象还支持 :meth:`~file.isatty` 和 :meth:`~file.truncate` "
"等方法,但不常用;文件对象的完整指南详见库参考。"
#: ../../tutorial/inputoutput.rst:467
msgid "Saving structured data with :mod:`json`"
msgstr "使用 :mod:`json` 保存结构化数据"
#: ../../tutorial/inputoutput.rst:471
msgid ""
"Strings can easily be written to and read from a file. Numbers take a bit "
"more effort, since the :meth:`read` method only returns strings, which will "
"have to be passed to a function like :func:`int`, which takes a string like "
"``'123'`` and returns its numeric value 123. When you want to save more "
"complex data types like nested lists and dictionaries, parsing and "
"serializing by hand becomes complicated."
msgstr ""
"从文件写入或读取字符串很简单,数字则稍显麻烦,因为 :meth:`read` 方法只返回字符串,这些字符串必须传递给 :func:`int` "
"这样的函数,接受 ``'123'`` 这样的字符串,并返回数字值 123。保存嵌套列表、字典等复杂数据类型时,手动解析和序列化的操作非常复杂。"
#: ../../tutorial/inputoutput.rst:478
msgid ""
"Rather than having users constantly writing and debugging code to save "
"complicated data types to files, Python allows you to use the popular data "
"interchange format called `JSON (JavaScript Object Notation) "
"<https://json.org>`_. The standard module called :mod:`json` can take "
"Python data hierarchies, and convert them to string representations; this "
"process is called :dfn:`serializing`. Reconstructing the data from the "
"string representation is called :dfn:`deserializing`. Between serializing "
"and deserializing, the string representing the object may have been stored "
"in a file or data, or sent over a network connection to some distant "
"machine."
msgstr ""
"Python 允许你使用流行的数据交换格式 `JSON (JavaScript Object Notation) "
"<https://json.org>`_,而不是让用户持续编写和调试代码来将复杂的数据类型存入文件中。 标准库模块 :mod:`json` "
"可以接受带有层级结构的 Python 数据,并将其转换为字符串表示形式;这个过程称为 :dfn:`serializing`。 "
"根据字符串表示形式重建数据则称为 :dfn:`deserializing`。 "
"在序列化和反序列化之间,用于代表对象的字符串可以存储在文件或数据库中,或者通过网络连接发送到远端主机。"
#: ../../tutorial/inputoutput.rst:489
msgid ""
"The JSON format is commonly used by modern applications to allow for data "
"exchange. Many programmers are already familiar with it, which makes it a "
"good choice for interoperability."
msgstr "JSON 格式通常用于现代应用程序的数据交换。程序员早已对它耳熟能详,可谓是交互操作的不二之选。"
#: ../../tutorial/inputoutput.rst:493
msgid ""
"If you have an object ``x``, you can view its JSON string representation "
"with a simple line of code::"
msgstr "只需一行简单的代码即可查看某个对象的 JSON 字符串表现形式:"
#: ../../tutorial/inputoutput.rst:501
msgid ""
"Another variant of the :func:`~json.dumps` function, called "
":func:`~json.dump`, simply serializes the object to a :term:`text file`. So"
" if ``f`` is a :term:`text file` object opened for writing, we can do this::"
msgstr ""
":func:`~json.dumps` 函数还有一个变体, :func:`~json.dump` ,它只将对象序列化为 :term:`text "
"file` 。因此,如果 ``f`` 是 :term:`text file` 对象,可以这样做:"
#: ../../tutorial/inputoutput.rst:507
msgid ""
"To decode the object again, if ``f`` is a :term:`binary file` or :term:`text"
" file` object which has been opened for reading::"
msgstr ""
"要再次解码对象,如果 ``f`` 是已打开、供读取的 :term:`binary file` 或 :term:`text file` 对象:"
#: ../../tutorial/inputoutput.rst:513
msgid ""
"JSON files must be encoded in UTF-8. Use ``encoding=\"utf-8\"`` when opening"
" JSON file as a :term:`text file` for both of reading and writing."
msgstr ""
"JSON文件必须以UTF-8编码。当打开JSON文件作为一个 :term:`text file` 用于读写时,使用 "
"``encoding=\"utf-8\"`` 。"
#: ../../tutorial/inputoutput.rst:516
msgid ""
"This simple serialization technique can handle lists and dictionaries, but "
"serializing arbitrary class instances in JSON requires a bit of extra "
"effort. The reference for the :mod:`json` module contains an explanation of "
"this."
msgstr ""
"这种简单的序列化技术可以处理列表和字典,但在 JSON 中序列化任意类的实例,则需要付出额外努力。:mod:`json` 模块的参考包含对此的解释。"
#: ../../tutorial/inputoutput.rst:522
msgid ":mod:`pickle` - the pickle module"
msgstr ":mod:`pickle` - 封存模块"
#: ../../tutorial/inputoutput.rst:524
msgid ""
"Contrary to :ref:`JSON <tut-json>`, *pickle* is a protocol which allows the "
"serialization of arbitrarily complex Python objects. As such, it is "
"specific to Python and cannot be used to communicate with applications "
"written in other languages. It is also insecure by default: deserializing "
"pickle data coming from an untrusted source can execute arbitrary code, if "
"the data was crafted by a skilled attacker."
msgstr ""
"与 :ref:`JSON <tut-json>` 不同,*pickle* 是一种允许对复杂 Python 对象进行序列化的协议。因此,它为 Python"
" 所特有,不能用于与其他语言编写的应用程序通信。默认情况下它也是不安全的:如果解序化的数据是由手段高明的攻击者精心设计的,这种不受信任来源的 "
"pickle 数据可以执行任意代码。"