正常的文件操作都分三步走:打开文件,操作文件,关闭文件。

python open() 函数用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写

语法

文件句柄 = open(文件名,模式)

例如:f = open('abc.txt', 'r', encoding='gbk')

r

以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。

rb

以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。

r+

打开一个文件用于读写。文件指针将会放在文件的开头。

rb+

以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。

w

打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

wb

以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

w+

打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

wb+

以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

a

打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

ab

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

a+

打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

ab+

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

file 对象方法

  • file.read([size]):读取文件所有内容并返回字符串,参数可加数字,如read(n),n为返回的字符数,单位字符。
  • file.readline():返回一行。
  • file.readlines([size]) :返回包含size行的列表, size 未指定则返回全部行。
  • f.write("hello\n"):如果要写入字符串以外的数据,先将他转换为字符串。
  • writelines(list) :写多行,参数为列表
  • f.tell():返回一个整数,表示当前文件指针的位置(就是到文件头的字节数)。
  • f.seek(偏移量,[起始位置]):用来移动文件指针。
  • 偏移量: 单位为字节,可正可负
  • 起始位置: 0 - 文件头, 默认值; 1 - 当前位置; 2 - 文件尾
  • f.close() :关闭文件
  • tell() :当前句柄指针,即光标位置
  • truncate() :截取文件句柄头到当前位置的字符串,返回None
  • xreadlines() :一行一行读,3.x版本已放弃此写法

代码示例

fh = open('abc.txt','wb+')  # 打开一个文件并写入
fh.tell()       # 文件句柄所在位置
fh.write('Life is like a roller coaster,live it,be happy,enjoy life.\n')   #写入一行
fh.writelines(["The best way to make your dreams come true is to wake up.\n","If you're not making mistakes,you're not trying hard enough."])    #写入多行,参数为列表list
fh.seek(0)      # 返回文件句柄头
fh.readline()   # 读一行
fh.readlines()  # 读所有行,返回列表list
fh.read()       # 读取全部内容,返回字符串
fh.tell()       # 读取当前位置
fh.truncate()   # 截取文件句柄头到当前位置的字符串
fh.close()      # 关闭文件句柄

当文件非常大时,要一行一行的读文件,要用for 循环,如果是配置文件,调用readlines()最方便

fh = open('tfile')
for line in fh:
    print line
fh.close()

有时我们常常忘记关闭文件句柄,如果不想多写一个关闭文件句柄的代码,可以使用with上下文操作(支持同时操作多个文件)

with open('tfile1') as fh1,open('tfile2') as fh2:
    ....