Python中的文件对象
文件对象允许我们使用、访问和操作所有用户可访问的文件。可以读取和写入任何此类文件。
当文件操作因 I/O 相关原因而失败时,会引发异常 IOError。这包括由于某种原因未定义操作的情况,例如 tty 设备上的 seek() 或写入打开以供读取的文件。
文件有以下方法:
- open():以给定的访问模式打开文件。
open(file_address, access_mode)
访问文件的示例: 可以使用名为 open() 的内置函数打开文件。这个函数接受文件的地址和 access_mode 并返回一个文件对象。
有不同类型的 access_modes:r: Opens a file for reading only r+: Opens a file for both reading and writing w: Opens a file for writing only w+: Open a file for writing and reading. a: Opens a file for appending a+: Opens a file for both appending and reading
当您将“b”添加到访问模式时,您可以以二进制格式而不是默认文本格式读取文件。当要访问的文件不是文本时使用它。
- read([size]) :它读取整个文件并以字符串的形式返回它的内容。从文件中读取最多 size 个字节(如果读取在获得 size 个字节之前达到 EOF,则更少)。如果 size 参数为负数或省略,则读取所有数据,直到达到 EOF。
# Reading a file f = open(__file__, 'r') #read() text = f.read(10) print(text) f.close()
- readline([size]) :如果文件只有一行,它会读取文件的第一行,即直到字符或 EOF 并返回一个字符串。如果 size 参数存在且非负数,则它是最大字节数(包括尾随换行符),并且可能会返回不完整的行。仅当立即遇到 EOF 时才返回空字符串。
# Reading a line in a file f = open(__file__, 'r') #readline() text = f.readline(20) print(text) f.close()
- readlines([sizehint]) :它逐行读取整个文件并将每一行更新为一个返回的列表。使用 readline() 读取直到 EOF 并返回一个包含如此读取的行的列表。如果存在可选的 sizehint 参数,而不是读取到 EOF,而是读取总计大约 sizehint 字节的整行(可能在四舍五入到内部缓冲区大小之后)。
# Reading a file f = open(__file__, 'r') #readline() text = f.readlines(25) print(text) f.close()
- write(字符串) :将字符串的内容写入文件。它没有返回值。由于缓冲,在调用 flush() 或 close() 方法之前,字符串可能不会真正显示在文件中。
# Writing a file f = open(__file__, 'w') line = 'Welcome Geeks\n' #write() f.write(line) f.close()
不同模式下的更多示例:
# Reading and Writing a file f = open(__file__, 'r+') lines = f.read() f.write(lines) f.close()
# Writing and Reading a file f = open(__file__, 'w+') lines = f.read() f.write(lines) f.close()
# Appending a file f = open(__file__, 'a') lines = 'Welcome Geeks\n' f.write(lines) f.close()
# Appending and reading a file f = open(__file__, 'a+') lines = f.read() f.write(lines) f.close()
- writelines(sequence) :它是文件的字符串序列,通常是字符串列表或任何其他可迭代的数据类型。它没有返回值。
# Writing a file f = open(__file__, 'a+') lines = f.readlines() #writelines() f.writelines(lines) f.close()
- tell() :它返回一个整数,以字节的形式告诉我们文件对象从文件开头的位置
# Telling the file object position f = open(__file__, 'r') lines = f.read(10) #tell() print(f.tell()) f.close()
- seek(offset, from_where) :用于改变文件对象的位置。偏移量表示要移动的字节数。 from_where 指示要从哪里移动字节。
# Setting the file object position f = open(__file__, 'r') lines = f.read(10) print(lines) #seek() print(f.seek(2,2)) lines = f.read(10) print(lines) f.close()
- flush() :刷新内部缓冲区,如 stdio 的 fflush()。它没有返回值。 close() 会自动刷新数据,但如果您想在关闭文件之前刷新数据,则可以使用此方法。
# Clearing the internal buffer before closing the file f = open(__file__, 'r') lines = f.read(10) #flush() f.flush() print(f.read()) f.close()
- fileno() :返回底层实现用来从操作系统请求 I/O 操作的整数文件描述符。
# Getting the integer file descriptor f = open(__file__, 'r') #fileno() print(f.fileno()) f.close()
- isatty() :如果文件连接到 tty(-like) 设备,则返回 True,否则返回 False。
# Checks if file is connected to a tty(-like) device f = open(__file__, 'r') #isatty() print(f.isatty()) f.close()
- next() :当文件用作迭代器时使用。该方法被重复调用。此方法返回下一个输入行或在文件打开以进行读取时在 EOF 处引发 StopIteration(打开以进行写入时的行为未定义)。
# Iterates over the file f = open(__file__, 'r') #next() try: while f.next(): print(f.next()) except: f.close()
- truncate([size]) :截断文件的大小。如果存在可选大小参数,则文件将被截断为(最多)该大小。大小默认为当前位置。当前文件位置没有改变。请注意,如果指定的大小超过了文件的当前大小,则结果取决于平台:可能包括文件可能保持不变、增加到指定的大小,就像用零填充一样,或者增加到指定的大小并带有未定义的新内容。
# Truncates the file f = open(__file__, 'w') #truncate() f.truncate(10) f.close()
- close() :用于关闭打开的文件。已关闭的文件无法再读取或写入。
# Opening and closing a file f = open(__file__, 'r') #close() f.close()
- 属性:
- closed :返回一个布尔值,指示文件对象的当前状态。如果文件关闭返回true,打开文件返回false。
- encoding :此文件使用的编码。将 Unicode字符串写入文件时,它们将使用此编码转换为字节字符串。
- mode :文件的 I/O 模式。如果文件是使用 open() 内置函数创建的,这将是 mode 参数的值。
- name :如果文件对象是使用 open() 创建的,则为文件名。
- newlines :已在通用换行模式下打开的文件对象具有此属性,该属性反映了文件中使用的换行约定。此属性的值是“\r”、“\n”、“\r\n”、None 或包含所有看到的换行符类型的元组。
- softspace :它是一个布尔值,指示在使用 print 语句时是否需要在另一个值之前打印一个空格字符。
f = open(__file__, 'a+') print(f.closed) print(f.encoding) print(f.mode) print(f.newlines) print(f.softspace)
相关文章:
在Python中读取和写入文本文件