一、file对象
操作文件首先要创建file对象,file对象使用open()
函数来创建。
1、读取创建
(1)读取文本文件,UTF-8编码:f = open('/Users/michael/test.txt', 'r')
(2)读取二进制文件,比如图片、视频等用rb
模式打开文件:f = open('/Users/michael/test.jpg', 'rb')
(3)读取非UTF-8编码的文本文件,需要给open()函数传入encoding
参数:f = open('/Users/michael/gbk.txt', 'r', encoding='gbk')
(4)有些编码不规范的文件,遇到编码错误,最简单的方式是直接忽略(errors
参数):f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')
2、写入创建
(1)写入文本文件,UTF-8编码:file = open('/Users/michael/test.txt', 'w')
(2)写入二进制文件:f = open('/Users/michael/test.jpg', 'wb')
(3)写入特定编码的文本文件,请给open()函数传入encoding参数:f = open('/Users/michael/gbk.txt', 'w', encoding='gbk')
(4)在文本末尾追加写入,需要传入a
参数(append):file = open('/Users/michael/test.txt', 'w', 'a')
二、读文件
创建file对象后,就可以调取read()
方法进行读取内容了。
1、read(size)
从文件读取指定的字节数,如果未给定或为负则读取所有:line = f.read()
#一次性全部读取line = f.read(10)
#一次读取10个字节,即5汉字
2、readline(size)
读取整行,包括 “\n” 字符:line = f.readline()
#一次性读取一整行line = f.readline(5)
#读取一行中的前5个字节
3、readlines(sizeint)
读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区:lines = f.readlines()
#一次性读取所有行,返回列表
三、写文件
创建file对象后,也可以调取write()
方法进行写入内容了。
1、write(str)
将字符串写入文件,没有返回值。f.write('hello world')
#向文件写入
2、writelines(sequence)
向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。seq = ["hello\n", "world\n"]
f.writelines(seq)
#向文件写入列表,并换行
四、关闭文件
文件使用完毕后必须关闭,关闭后文件不能再进行读写操作。
1、close()
f.close()
由于文件读写时都有可能产生IOError,一旦出错后面的f.close()就不会调用,我们可以使用try...finally
来实现
1
2
3
4
5
6 try:
f = open('/path/to/file', 'r')
print(f.read())
finally:
if f:
f.close()
2、with…as…
Python引入了with
语句来自动帮我们调用close()
方法:
1
2 with open('/Users/michael/test.txt', 'w') as f:
f.write('Hello, world!')
五、其他操作
1、file.flush()
刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
2、file.next()
返回文件下一行。
3、file.tell()
返回文件当前位置。
4、file.seek(offset[, whence])
设置文件当前位置。
- offset:开始的偏移量,也就是代表需要移动偏移的字节数。
- whence:默认值为0,表示要从哪个位置开始偏移,0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
5、file.truncate(size)
从文件的首行首字符开始截断,截断文件为size个字符,无size表示从当前位置截断;截断之后V后面的所有字符被删除,其中Widnows系统下的换行代表2个字符大小。
6、file.isatty()
如果文件连接到一个终端设备返回 True,否则返回 False。
7、file.fileno()
返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。
1 | # 文本操作 |
六、csv文件
1 | # csv操作 |
持续更新…
最后更新: 2018年12月04日 17:38