非常教程

Python参考手册

内置类型 | Built-in Types

Types: 9. File Objects

9. File Objects

文件对象使用C的stdio包来实现,并且可以使用内置open()函数来创建。文件对象也由其他一些内置函数和方法返回,比如os.popen()os.fdopen()makefile()套接字对象的方法。可以使用该tempfile模块创建临时文件,并且可以使用shutil模块实现高级文件操作,例如复制,移动和删除文件和目录。

当文件操作由于I / O相关原因而失败时,IOError会引发异常。这包括由于某些原因未定义操作的情况,例如seek()在tty设备上或写入打开以供阅读的文件。

文件有以下方法:

file.close()

关闭文件。已关闭的文件不能再被读取或写入。任何要求文件打开的操作将ValueError在文件关闭后生成一个文件。close()允许多次呼叫。

从Python 2.5开始,如果使用with语句,则可以避免必须显式调用此方法。例如,下面的代码将在退出块时自动关闭fwith

from __future__ import with_statement # This isn't required in Python 2.6

with open("hello.txt") as f:
    for line in f:
        print line,

在旧版本的Python中,您需要这样做才能获得相同的效果:

f = open("hello.txt")
try:
    for line in f:
        print line,
finally:
    f.close()

注释

并非所有Python中的“类文件”类型都支持用作with语句的上下文管理器。如果您的代码旨在用于任何类似文件的对象,则可以使用该函数contextlib.closing()而不是直接使用该对象。

file.flush()

冲洗内部缓冲区,如stdio's fflush()。这可能对某些类似文件的对象没有作用。

注释

flush()不一定会将文件的数据写入磁盘。使用flush()后面的os.fsync()来确保这种行为。

file.fileno()

返回底层实现使用的整数“文件描述符”,以从操作系统请求I / O操作。这对于使用文件描述符的其他较低级别的接口(如fcntl模块或os.read()和朋友)可能很有用。

注释

类文件不具有真正的文件描述符应该对象提供这个方法!

file.isatty()

返回True如果文件被连接到一个tty(样)的装置,别的False

注释

如果一个类文件对象是不是一个真正的文件相关联,这种方法应该被执行。

file.next()

一个文件对象是它自己的迭代器,例如iter(f)返回f(除非f关闭)。当一个文件被用作迭代器时,通常在一个for循环中(例如,for line in f: print line.strip()),该next()方法被重复调用。此方法返回下一个输入行,或者StopIteration在文件打开时读取EOF时触发EOF(当文件打开时,行为未定义)。为了使for循环成为循环遍历文件行的最有效方式(非常常见的操作),该next()方法使用隐藏的预读缓冲区。由于使用预读缓冲区,结合next()其他文件方法(如readline())不能正常工作。但是,使用seek() 将文件重新定位到绝对位置将刷新预读缓冲区。

2.3版本的新功能。

file.read([size])

从文件中读取大小最大的字节(如果在读取大小字节之前读取命中EOF,则读取次数更少)。如果size参数为负值或省略,请读取所有数据,直到达到EOF。字节以字符串对象的形式返回。立即遇到EOF时返回空字符串。(对于某些文件,如ttys,在EOF命中后继续读取是有意义的。)请注意,此方法可能会fread()多次调用基础C函数以努力获取尽可能接近大小的字节。还要注意的是,当处于非阻塞模式时,即使没有给出大小参数,也可能返回比请求的数据更少的数据。

注释

这个函数只是底层fread()C函数的一个包装,并且在角落情况下表现得相同,比如EOF值是否被缓存。

file.readline([size])

从文件中读取整行。尾随的换行符保存在字符串中(但当文件以不完整的行结尾时可能不存在)。[6]如果size参数存在且非负数,则它是最大字节数(包括尾随换行符),并且可能返回不完整的行。当size不是0时,当立即遇到EOF 时才返回空字符串。

注释

stdio不同的是fgets(),如果返回的字符串'\0'出现在输入中,则返回的字符串包含空字符()。

file.readlines([sizehint])

阅读直到使用EOF,readline()并返回包含这样读取的行的列表。如果存在可选的sizehint参数,而不是读取到EOF,则会读取总计约为sizehint字节的整行(可能在四舍五入到内部缓冲区大小之后)。实现类似文件的界面的对象可能会选择忽略sizehint,如果它无法实现,或无法有效实施。

file.xreadlines()

此方法返回与之相同的内容iter(f)

2.1版本中的新功能。

自2.3版弃用:for line in file改为使用。

file.seek(offset[, whence])

设置文件的当前位置,如stdio's fseek()。的何处参数是可选的,缺省值是os.SEEK_SET0(绝对文件定位); 其他值是os.SEEK_CUR1(相对于当前位置寻找)和os.SEEK_END2(相对于文件结尾寻找)。没有返回值。

例如,f.seek(2, os.SEEK_CUR)将位置提前两位,f.seek(-3, os.SEEK_END)并将位置设置为倒数第三位。

请注意,如果打开文件以进行追加(模式'a''a+'),seek()则在下次写入时将取消所有操作。如果文件仅在追加模式(模式'a')下打开才能打开,则此方法本质上是无操作的,但对于在启用读取(模式'a+')的附加模式下打开的文件仍然有用。如果文件以文本模式打开(不带'b'),则只有返回的偏移量tell()是合法的。使用其他偏移导致未定义的行为。

请注意,并非所有文件对象都是可搜索的。

在版本2.6中更改:将浮点值传递为偏移量已被弃用。

file.tell()

返回文件的当前位置,如stdio's ftell()

注释

在Windows上,当读取具有Unix风格的行结尾的文件时,tell()可以返回非法值(之后fgets())。使用二进制模式('rb')来解决这个问题。

file.truncate([size])

截断文件的大小。如果可选大小参数存在,则该文件被截断为(最多)该大小。大小默认为当前位置。当前文件位置不变。请注意,如果指定大小超过文件的当前大小,则结果将取决于平台:可能性包括文件可能保持不变,增加到指定的大小,就像零填充一样,或者用未定义的新内容增加到指定的大小。可用性:Windows,许多Unix变体。

file.write(str)

将一个字符串写入文件。没有返回值。由于缓冲,在调用flush()or close()方法之前,字符串可能实际上不会显示在文件中。

file.writelines(sequence)

将一串字符串写入文件。序列可以是任何可生成字符串的可迭代对象,通常是字符串列表。没有返回值。(该名称旨在匹配readlines(); writelines()不添加行分隔符。)

文件支持迭代器协议。每次迭代都会返回相同的结果readline(),并且当readline()方法返回空字符串时迭代结束。

文件对象还提供了许多其他有趣的属性。对于类似文件的对象,这些不是必需的,但是如果它们对于特定对象有意义的话应该被实现。

file.closed

bool表示文件对象的当前状态。这是只读属性; 该close()方法更改值。它可能不适用于所有类文件对象。

file.encoding

该文件使用的编码。当Unicode字符串写入文件时,它们将被转换为使用此编码的字节字符串。另外,当文件连接到终端时,该属性给出终端可能使用的编码(如果用户配置了终端,则该信息可能不正确)。该属性是只读的,可能不会出现在所有类文件对象上。也可能是None,在这种情况下,文件使用系统默认编码来转换Unicode字符串。

2.3版本的新功能。

file.errors

Unicode错误处理程序与编码一起使用。

2.6版本中的新功能。

file.mode

文件的I / O模式。如果文件是使用open()内置函数创建的,则这将是mode参数的值。这是一个只读属性,可能不会出现在所有类文件对象上。

file.name

如果文件对象是使用创建open()的文件的名称。否则,一些字符串指示表单的文件对象的来源<...>。这是一个只读属性,可能不会出现在所有类文件对象上。

file.newlines

如果Python是使用通用换行符(默认值)构建的,则此只读属性存在,对于以通用换行读取模式打开的文件,它会跟踪读取文件时遇到的换行符类型。它可以采取的值'\r''\n''\r\n'None(未知,没有换行读还)或包含所有看到的换行符类型,元组,指示中所遇到的多个换行符约定。对于未以通用换行符读取模式打开的文件,此属性的值将为None

file.softspace

指示在使用print语句时是否需要在另一个值之前打印空格字符的布尔值。试图模拟文件对象的类也应该有一个可写softspace属性,该属性应该初始化为零。对于大多数在Python中实现的类,这将是自动的(对于覆盖属性访问的对象可能需要注意); 用C实现的类型必须提供一个可写的softspace属性。

注意

该属性不用于控制print语句,但允许执行print以跟踪其内部状态。

Python

Python 是一种面向对象的解释型计算机程序设计语言,由荷兰人 Guido van Rossum 于1989年发明,第一个公开发行版发行于1991年。 Python 是纯粹的自由软件, 源代码和解释器 CPython 遵循 GPL 协议。Python 语法简洁清晰,特色之一是强制用空白符( white space )作为语句缩进。

主页 https://www.python.org/
源码 https://github.com/python/cpython
版本 2.7
发布版本 2.7.13

Python目录

1.内置常量 | Built-in Constants
2.内置例外 | Built-in Exceptions
3.内置函数 | Built-in Functions
4.内置类型 | Built-in Types
5.编译器 | Compiler
6.加密 | Cryptography
7.数据压缩 | Data Compression
8.数据持久性 | Data Persistence
9.数据类型 | Data Types
10.调试和分析 | Debugging & Profiling
11.开发工具 | Development Tools
12.文件和目录访问 | File & Directory Access
13.文件格式 | File Formats
14.构架 | Frameworks
15.输入 | Importing
16.输入/输出 | Input/ouput
17.国际化 | Internationalization
18.网络 | Internet
19.网络数据 | Internet Data
20.翻译 | Interpreters
21.语言 | Language
22.记录 | Logging
23.Mac OS
24.MS Windows
25.多媒体 | Multimedia
26.联网 | Networking
27.数字与数学 | Numeric & Mathematical
28.操作系统 | Operating System
29.可选操作系统 | Optional Operating System
30.限制执行 | Restricted Execution
31.运行 | Runtime
32.SGI IRIX
33.软件包装与分销 | Software Packaging & Distribution
34.字符串 | String
35.结构化标记 | Structured Markup
36.Tk
37.Unix
38.Python 简介
39.Python pass 语句
40.Python 循环嵌套
41.Python 运算符
42.Python log10() 函数
43.Python log() 函数
44.Python floor() 函数
45.Python fabs() 函数
46.Python exp() 函数
47.Python cmp() 函数
48.Python ceil() 函数
49.Python abs() 函数
50.Python Number(数字)
51.Python pow() 函数
52.Python modf() 函数
53.Python min() 函数
54.Python max() 函数
55.Python asin() 函数
56.Python acos() 函数
57.Python uniform() 函数
58.Python shuffle() 函数
59.Python seed() 函数
60.Python random() 函数
61.Python randrange() 函数
62.Python choice() 函数
63.Python sqrt() 函数
64.Python round() 函数
65.Python radians() 函数
66.Python degrees() 函数
67.Python tan() 函数
68.Python sin() 函数
69.Python hypot() 函数
70.Python cos() 函数
71.Python atan2() 函数
72.Python atan() 函数
73.Python 元组
74.Python 列表(List)
75.Python 字符串
76.Python 字典(Dictionary)
77.Python 日期和时间
78.Python 函数
79.Python 模块
80.Python capitalize()方法
81.Python center()方法
82.Python count() 方法
83.Python expandtabs()方法
84.Python endswith()方法
85.Python encode()方法
86.Python decode()方法
87.Python find()方法
88.Python index()方法
89.Python 异常处理
90.Python isspace()方法
91.Python isnumeric()方法
92.Python islower()方法
93.Python isdigit()方法
94.Python isalpha()方法
95.Python isalnum()方法
96.Python isupper()方法
97.Python istitle()方法
98.Python min()方法
99.Python max()方法
100.Python maketrans()方法