Python 文件


Python中操作文件有3个步骤:

  1. 打开文件。使用open函数打开文件,得到一个文件(file)对象。
  2. 对文件进行一或多次读写操作。
  3. 关闭文件。使用close函数关闭文件。close函数将缓冲区中未写入文件的数据写入文件,关闭file对象。如果使用with open() as f:写法打开文件,无论在读写操作时是否发生错误,文件都会被自动关闭,因此这一步可以省略。

打开文件时文件的访问模式有下面几种:

  • 'r': 为读取打开文件,文件必须存在。访问模式默认值为'r'。
  • 'w': 为写入打开文件,如果文件不存在则创建一个文件,如果文件存在,清除文件的内容。
  • 'a': 添加数据到文件的结尾处,如果文件不存在,创建文件。
  • 'r+': 为读取和写入打开文件,文件必须存在。
  • 'w+': 为读取和写入创建一个文件,如果文件存在,清除文件的内容。
  • 'a+': 为读取和添加打开文件,添加数据只能加在结尾处。

上面的模式处理文本文件,'rb'、'wb'、'ab'、'rb+'、'wb+'、'ab+'用来处理二进制文件。

读写文件

使用file对象的read方法从文件中读取指定长度的字节。readline方法从文件中读取一行。readlines方法读取文件的所有行。

使用file对象的write方法往文件中写入字符串或字节序列。

下面是读写文件的例子:

#!/usr/bin/python
with open('1.txt', 'w', encoding='utf-8') as f:
    f.write('hello world\n')
    f.write('welcome to python\n')
print(f.closed) # True

try:
    f = open('1.txt', 'r', encoding='utf-8')
    for line in f:
        print(line, end='')
finally:
    f.close()

文件位置

file对象的tell方法返回文件指针的当前位置。

file对象的seek方法seek(offset[, from])设置文件指针的位置。from参数指定文件指针的初始位置,offset参数是以from为参考位置的偏移量。

from有下面3种值:

  • 0:文件的开始位置。
  • 1:文件指针的当前位置。
  • 2:文件的结尾位置。

下面是文件位置的例子:

#!/usr/bin/python
with open('1.bin', 'wb+') as f:
    f.write(b'012345678')
    f.seek(-1, 2)
    print(f.tell())     # 8
    print(f.read(1))    # b'8'

文件和目录操作

os模块和shutil模块提供了方法用于操作文件和目录。

  • os.rename:更改文件名。
  • os.remove:删除文件。
  • os.mkdir:创建目录。
  • os.chdir:更改当前目录。
  • os.getcwd:得到当前目录。
  • os.rmdir:删除目录。要删除的目录必须为空。
  • os.path.exists:文件或目录是否存在。
  • os.path.isfile:判断指定参数是否文件。
  • os.path.isdir:判断指定参数是否目录。
  • shutil.move:移动文件。
  • shutil.copy:复制文件。
  • shutil.copytree:递归复制目录及下级目录,包括文件。
  • shutil.rmtree:递归删除目录及下级目录,包括文件。