python 读写文件

0,文件有两种类型:文本文件和二进制文件。

 

1,首先用到内置的open()函数,创建一个stream对象。

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

常用的参数三个:1,file文件名;2,mode文件打开模式;3,encoding编码(只对文本文件有效)

mode打开模式:

'r' open for reading (default)
'w' open for writing, truncating the file first
'x' create a new file and open it for writing
'a' open for writing, appending to the end of the file if it exists
'b' binary mode
't' text mode (default)
'+' open a disk file for updating (reading and writing)
'U' universal newline mode (deprecated)

 

2,读取一个文本文件:

file = open("test.txt")
data = file.read()
file.close()

这里有两个问题。一是可能忘记关闭文件句柄;二是文件读取数据发生异常,没有进行任何处理。下面是处理异常的加强版本:
file = open("test.txt")
try:
  data = file.read()
finally:
  file.close()

虽然这段代码运行良好,但是太冗长了。这时候就是with一展身手的时候了。
with open("test.txt") as file:
  data = file.read()

 

3,面对文本文件,对象提供了三个“读”方法:read()、readline()和readlines()。每种方法可以接受一个变量以限制每次读取的数据量。

read()每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。如果文件大于可用内存,为了保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。
readlines()一次读取整个文件,自动将文件内容分析成一个行的列表。
readline() 每次只读取一行。

注意:

这三种方法是把每行末尾的'\n'也读进来了,它并不会默认的把'\n'去掉,需要我们手动去掉。字符串的rstrip('\n')方法去掉后面的字符'\n'

文件对象提供了两个“写”方法: write() 和 writelines()。 

 

4,遍历文件的所有行,也可以用遍历文件对象的方式:

for line in file:

  print(line)

 

5,文件对象的位置

前面的例子中,我们已经读到文件的末尾,如果要再从头读的话就要调用f.seek(0)来设置文件对象的位置到文件开头。

这个方法有两个参数:f.seek(cookie, whence=0)

cookie 是位置偏移量
whence 是相对位置,它有三种相对位置:

0 文件开头,偏移量是0或整数;
1 当前位置,偏移量可以是负数;
2 文件末尾,偏移量通常是负数;

如何查看当前位置呢?调用f.tell()方法。

 

6,字符编码

对于文本文件,可能需要给open()函数传入encoding参数,例如,读取utf-8编码的文件:
  f = open('test.txt', 'r', encoding='utf-8')
  f.read()
遇到有些编码不规范的文件,open()函数还可以接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略:
  f = open('test.txt', 'r', encoding='gbk', errors='ignore')

 

posted @ 2019-07-12 21:57  隐泉  阅读(530)  评论(0编辑  收藏  举报