赞
赏
在 Python 中,读写 文件 之前都需要使用 open 函数打开文件。 使用 open 打开文件之后,返回的 file 对象的文件指针默认总是指向文件的开始。
所以,每次打开文件进行读取时,总是从文件的开始处开始读取,同样,每次打开文件进行写入时,总是从文件的开始处开始写入,但 Python 为我们提供了 seek 函数,该函数可以用来移动文件指针。
n = fileObject.seek(offset[, whence])
参数 | 描述 |
---|---|
n | 新的文件位置。 |
fileObject | 文件对象。 |
offset | 偏移量。 |
whence | 可选参数,默认为 0。表示给 offset 参数一个定义,表示要从哪个位置开始偏移。 0 :代表从文件开头开始偏移。 1 : 代表从当前位置开始偏移。 2 : 代表从文件末尾开始偏移。 |
如果操作成功,则返回新的文件位置,如果操作失败,则函数返回 -1。
fileObject 表示已经打开的文件对象,offset 表示开始的偏移量,也就是代表需要移动偏移的字节数。
whence 是可选 参数,默认值为 0。 表示给 offset 参数一个定义,表示要从哪个位置开始偏移,0 代表从文件开头开始偏移,1 代表从当前位置开始偏移,2 代表从文件末尾开始偏移。
使用 seek 函数移动文件指针
print("嗨客网(www.haicoder.net)")
file = open("C:/haicoder.txt", "w+")
file.write("Hello HaiCoder")
file.write("Hello HaiCoder")
print("file write success")
fileContent = file.read()
print("file content =", fileContent)
file.seek(0)
fileContent = file.read()
print("file content =", fileContent)
file.close()
程序运行后,控制台输出如下:
我们首先打开文件,然后连续两次写入文件,写入之后,使用打开文件返回的 file 对象开始读文件,此时,我们发现,读取的内容为空。
因为,此时的 file 指针因为写文件的原因以及被移动到了文件尾,所以此时读取文件的内容为空,接着,我们使用 seek 函数,将文件指针移动到文件开始。
此时,再次读取文件,我们发现读取到了我们写入的文件内容,最后,调用 close 函数关闭打开的文件。
使用 seek 函数移动文件指针
print("嗨客网(www.haicoder.net)")
file = open("C:/haicoder.txt", "w+")
file.write("Hello HaiCoder,I am study python from haicoder")
print("file write success")
fileContent = file.read()
print("file content =", fileContent)
file.seek(0)
fileContent = file.read()
print("file content =", fileContent)
file.seek(0)
file.seek(0, 2)
fileContent = file.read()
print("file content =", fileContent)
file.seek(6)
file.seek(0, 1)
fileContent = file.read()
print("file content =", fileContent)
file.close()
程序运行后,控制台输出如下:
我们首先打开文件,然后写入文件,写入之后,使用打开文件返回的 file 对象开始读文件,此时,我们发现,读取的内容为空。
因为,此时的 file 指针因为写文件的原因以及被移动到了文件尾,所以此时读取文件的内容为空,接着,我们使用 seek 函数,将文件指针移动到文件开始。
此时,再次读取文件,我们发现读取到了我们写入的文件内容,接着,我们再次将文件指针移动到文件开始,再次使用 seek 函数,并且 whence 参数传递 2,表明从文件尾开始偏移 0,即移动到文件尾,所以,此时再次读取,还是读的内容为空。
最后,我们将指针移动到第六个字符处,并再次将 whence 参数传递 1,表明从文件指针当前位置开始偏移 0,此时再次读取,读取到了文件从位置 6 开始之后的所有内容。
Python 为我们提供了 seek 函数,该函数可以用来移动文件指针。Python seek 函数语法:
n = fileObject.seek(offset[, whence])