文件的定位读写
1.tell()方法
用于获取文件当前的读写位置,会返回一个表示文件位置的整数,这个整数的单位为字节 示例如下:
2.seek()方法
用于移动文件读写位置到指定的位置,便于用户能够从任意位置开始读写文件,语法格式:
seek(offset,whence=os.SEEK_SET, /)
seek () 方法中的参数 offset 表示偏移量,即文件读写位置需要移动的字节数,它的取值可以为正数、负数或 0,其中正数表示相对于指定位置向文件末尾移动的字节数,负数表示相对于指定位置向文件开头移动的字节数,0 表示不移动,即保持位置不变;参数 whence 用于指定偏移量的参考位置,该参数支持的取值及其代表的含义分别如下。
- os.SEEK_SET 或 0:默认值,表示从文件开头位置开始偏移。
- os.SEEK_CUR 或 1:表示从当前位置开始偏移。
- os.SEEK_END 或 2:表示从文件末尾位置开始偏移。
seek () 方法调用成功后会返回当前的文件读写位置
示例代码:
with open('write_file.txt') as file:
read_location = file.seek(5, 0) # 从文件开头移动5个字节
print(read_location) # 输出当前的文件读写位置
result = file.read(3) # 读取3个字符
print(result)
结果:
5
est
seek () 操作文本文件的注意事项
当使用 seek () 方法操作文本文件时,只能在whence参数值为 0 的情况下从文件开头位置开始移动文件读写位置,而不能在whence参数值为 1 或 2 的情况下进行移动,否则会导致程序报错。示例代码如下:
with open('write_file.txt') as file: # 打开文本文件
read_location = file.seek(5, 0) # 从文件开头移动5个字节
print(read_location)
read_location = file.seek(-3, 2) # 从文件末尾向前移动3个字节
print(read_location)
运行代码,结果如下所示:
5
Traceback (most recent call last):
File "E:\FastPrograms3\Chapter07\code02.py", line 4, in <module>
read_location = file.seek(-3, 2) # 从文件末尾向前移动3个字节
io.UnsupportedOperation: can't do nonzero end-relative seeks
二进制方式打开文件的 seek () 操作
若要相对于当前的文件读写位置或文件末尾移动文件读写位置,则需要以二进制读取的方式打开文件,示例代码如下:
with open('write_file.txt', 'rb') as file: # 以二进制读取的方式打开文件
read_location = file.seek(5, 0) # 从文件开头移动5个字节
print(read_location)
read_location = file.seek(-3, 2) # 从文件末尾向前移动3个字节
print(read_location)
运行代码,结果如下所示:
5
88
文件与目录管理
1. 删除文件 ——remove () 函数
os 模块中的 remove () 函数用于删除指定路径下的文件,若待删除的文件不存在,则会导致程序报错。remove () 函数的语法格式如下:remove(path)以上语法格式中,参数 path 表示待删除文件的路径,其取值可以为绝对路径或相对路径。若该参数的值为一个文件的名称,则表明删除当前目录下指定名称的文件。
例如,使用 remove () 函数删除文件 a.txt,具体代码如下:
import os
os.remove('a.txt')
2. 重命名目录或文件 ——rename () 函数
使用 os 模块中的 rename () 函数可以重命名目录或文件,该函数要求目标目录或文件必须存在,若不存在,导致程序报错。rename () 函数的语法格式如下:rename(src, dst, src_dir_fd=None, dst_dir_fd=None)
以上语法格式中各参数的含义如下:
- src:表示旧的目录名或文件名。
- dst:表示新的目录名或文件名。
- src_dir_fd:表示旧目录或文件对应的文件描述符,文件描述符是操作系统用来标识已经打开的文件的一种方式,如果指定了此参数,则会将 src 视为 src_dir_fd 指定的目录的相对路径。例如,重命名 /home/user/documents/file.txt,src_dir_fd 参数指定的文件描述符为 /home/user,src 参数的值可以简化为 documents/file.txt,而不需要使用绝对路径。
- dst_dir_fd:表示新目录或文件对应的文件描述符,如果指定了此参数,则会将 dst 视为 dst_dir_fd 指定的目录的相对路径。
例如,使用 rename () 函数重命名文件 write_file.txt,具体代码如下:
os.rename('a.txt', 'test.txt')
3. 创建或删除目录 ——mkdir () 或 rmdir () 函数
os 模块中的 mkdir () 函数用于创建目录,rmdir () 函数用于删除目录,这两个函数都必须传入一个目录名。
例如,使用 mkdir () 函数创建名称为 dir 的目录,具体代码如下:
os.mkdir('dir')
运行以上代码后,当前路径下会生成名称为 dir 的目录。需要注意的是,待创建目录不能与已有目录重名,否则将创建失败。
例如,使用 rmdir () 函数删除名称为 dir 的目录,具体代码如下:
os.rmdir('dir')
4. 获取当前目录 ——getcwd () 函数
当前目录即 Python 当前的工作路径。os 模块中的 getcwd () 函数用于获取当前目录,该函数可获取当前目录的绝对路径。示例代码如下:
result = os.getcwd()
print(result)
5. 更改默认目录 ——chdir () 函数
os 模块中的 chdir () 函数用于更改默认目录。若对文件或文件夹进行操作时传入的是名而非路径,Python 解释器会从默认目录中查找指定文件,或在默认目录下创建新的文。没有特别设置,当前目录即为默认目录。
使用 chdir () 函数更改默认目录为 “E:\”,再次使用 getcwd () 函数获取当前目录,示例如下:
os.chdir('E:\') # 更改默认目录
result = os.getcwd() # 获取当前目录
print(result)
运行代码,结果如下所示:'E:\'
6. 获取文件名列表 ——listdir () 函数
实际应用中常常需要先获取指定目录下的所有文件,再对目标文件进行相应操作。os 模块中提供了 listdir () 函数,使用该函数可方便快捷地获取指定目录下所有文件的文件名列表。
例如,获取当前目录下的所有文件的文件名列表,具体代码如下:
dirs = os.listdir('./') # 获取文件名列表
print(dirs)