**介绍:
Python3 中的file
对象提供了多种方法来操作文件,以下是一些常用的文件方法:
- close():关闭一个已打开的文件。这是释放文件资源的重要步骤,通常在文件操作完成后调用。
- flush():刷新文件的缓冲区,即将缓冲区中的数据立即写入文件。这在需要确保数据被写入文件时使用,例如在写入日志文件后立即调用
flush()
可以确保日志被及时记录。 - fileno():返回一个整型的文件描述符(file descriptor),这个描述符可以用来识别打开的文件。
- isatty():检测文件是否连接到一个终端设备。如果是,返回True;否则返回False。这可以用来判断当前文件对象是否关联到一个交互式终端。
- read(size):从文件中读取指定字节数的数据。如果不指定
size
或指定为负数,则读取整个文件内容。 - readline():从文件中读取一行数据。如果文件较大,逐行读取可以提高内存效率。
- write(str):将字符串写入文件。这是文件写入的基本操作,用于将数据保存到文件中。
- seek(offset, whence):改变文件指针的位置。
offset
是移动的字节数,whence
是参考位置(0表示文件开头,1表示当前位置,2表示文件末尾)。 - tell():返回当前文件指针的位置,即从文件开头到当前位置的字节偏移量。
- truncate(size):截断文件,即删除从当前文件指针位置到文件末尾的数据。如果指定了
size
,则会将文件大小调整为size
指定的值。 - writelines(lines):写入一个字符串列表到文件中,每个字符串代表一行。
- readlines():读取所有行并返回一个包含每行的字符串列表。
- readlines(hint):与
readlines()
类似,但接受一个可选参数hint
,用来优化读取多行的性能。 - seekable():检查文件是否支持
seek()
操作,即是否可以移动文件指针。 - writable():检查文件是否可写。
- readable():检查文件是否可读。
- iter():使文件对象成为可迭代的,可以用于循环中逐行读取。
这些方法使得Python的文件操作变得非常灵活和强大。在使用文件时,需要注意文件的打开和关闭,以及异常处理,确保文件在操作完成后能够正确关闭,避免数据丢失或损坏。**
1、Python3 File(文件) 方法
1.1 、open() 方法
Python open() 方法用于打开一个文件,并返回文件对象。
在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。
注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。
open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)。
open(file, mode='r')
完整的语法格式为:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明:
file: 必需,文件路径(相对或者绝对路径)。
mode: 可选,文件打开模式
buffering: 设置缓冲
encoding: 一般使用utf8
errors: 报错级别
newline: 区分换行符
closefd: 传入的file参数类型
opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。
mode 参数有:
默认为文本模式,如果要以二进制模式打开,加上 b 。
2、file 对象
file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数:
2.1、 Python3 File close() 方法
概述
close() 方法用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作, 否则会触发 ValueError 错误。 close() 方法允许调用多次。
当 file 对象,被引用到操作另外一个文件时,Python 会自动关闭之前的 file 对象。 使用 close() 方法关闭文件是一个好的习惯。
语法
close() 方法语法如下:
fileObject.close();
参数
无
返回值
该方法没有返回值。
实例
以下实例演示了 close() 方法的使用:
# 打开文件
f = open("hello.txt", "wb")
print("文件名为: ", f.name)
# 关闭文件
f.close()
运行结果
文件名为: hello.txt
2.2、Python3 File read() 方法
概述
read() 方法用于从文件读取指定的字符数(文本模式 t)或字节数(二进制模式 b),如果未给定参数 size 或 size 为负数则读取文件所有内容。
语法
read() 方法语法如下:
fileObject.read([size]);
参数
size – 从文件中读取的字符数(文本模式)或字节数(二进制模式),默认为 -1,表示读取整个文件。
返回值
返回从字符串中读取的字节。
实例
以下实例演示了 read() 方法的使用:
文件 Hello.txt 的内容如下:
这是第一行
这是第二行
这是第三行
这是第四行
这是第五行
循环读取文件的内容:
# 打开文件
fo = open("runoob.txt", "r+")
print ("文件名为: ", fo.name)
line = fo.read(10)
print ("读取的字符串: %s" % (line))
# 关闭文件
fo.close()
运行结果
文件名为: runoob.txt
读取的字符串: 这是第一行
这是第二
2.3、Python3 File readline() 方法
概述
readline() 方法用于从文件读取整行,包括 “\n” 字符。如果指定了一个非负数的参数,则返回指定大小的字节数,包括 “\n” 字符。
语法
readline() 方法语法如下:
fileObject.readline();
参数
size – 从文件中读取的字节数。
返回值
返回从字符串中读取的字节。
实例
以下实例演示了 readline() 方法的使用:
文件 Hello.txt 的内容如下:
1:Hello world!
2:Hello python!
3:Hello java!
4:Hello c++!
5:Hello php!
读取文件的内容:
# 打开文件
f2 = open("D:\\Python3.12\\pythondeme\\Hello\\hello.txt", "r+")
print ("文件名为: ", f2.name)
line = f2.readline()
print ("读取第一行 %s" % (line))
line = f2.readline(5)
print ("读取的字符串为: %s" % (line))
# 关闭文件
f2.close()
运行结果
文件名为: D:\Python3.12\pythondeme\Hello\hello.txt
读取第一行 1:Hello world!
读取的字符串为: 2:Hel
2.4、Python3 File tell() 方法
概述
tell() 方法返回文件的当前位置,即文件指针当前位置。
语法
tell() 方法语法如下:
fileObject.tell()
参数
无
返回值
返回文件的当前位置。
实例
以下实例演示了 tell() 方法的使用:
文件 hello.txt 的内容如下:
1:Hello world!
2:Hello python!
3:Hello java!
4:Hello c++!
5:Hello php!
循环读取文件的内容:
# 打开文件
f3 = open("D:\\Python3.12\\pythondeme\\Hello\\hello.txt", "r+")
print("文件名为: ", f3.name)
line = f3.readline()
print("读取的数据为: %s" % (line))
# 获取当前文件位置
pos = f3.tell()
print("当前位置: %d" % (pos))
# 关闭文件
f3.close()
运行结果
文件名为: D:\Python3.12\pythondeme\Hello\hello.txt
读取的数据为: 1:Hello world!
当前位置: 16
2.5、Python3 File write() 方法
概述
write() 方法用于向文件中写入指定字符串。
在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容的。
如果文件打开模式带 b,那写入文件内容时,str (参数)要用 encode 方法转为 bytes 形式,否则报错:TypeError: a bytes-like object is required, not ‘str’。
语法
write() 方法语法如下:
fileObject.write( [ str ])
参数
str – 要写入文件的字符串。
返回值
返回的是写入的字符长度。
实例
文件 hello.txt 的内容如下:
Hello world!
Hello Python!
good Python!
Hello world!
Hello Python!
good Python!
以下实例演示了 write() 方法的使用:
# 打开文件
fo = open("runoob.txt", "r+")
print ("文件名: ", fo.name)
str = "6:www.runoob.com"
# 在文件末尾写入一行
fo.seek(0, 2)
line = fo.write( str )
# 读取文件所有内容
fo.seek(0,0)
for index in range(6):
line = next(fo)
print ("文件行号 %d - %s" % (index, line))
# 关闭文件
fo.close()
运行结果
文件行号 0 - 1:www.runoob.com
文件行号 1 - 2:www.runoob.com
文件行号 2 - 3:www.runoob.com
文件行号 3 - 4:www.runoob.com
文件行号 4 - 5:www.runoob.com
文件行号 5 - 6:www.runoob.com