python--文件(3)

44 阅读5分钟

文件的定位读写

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)