一、读文件
1. Python内置函数
f=open('/Users/laplas/data.txt','r') 'r'表示读文件 f.read() 一次读取文件的全部内容 f.close() 关闭文件 f.read(size) 最多读取size个字节内容 f.readline() 逐行读取 f.readlines() 一次读取所有内容并按行返回list
前面讲的默认都是读取文本文件,并且是 UTF-8 编码的文本文件,若要读取二进制文件,比如图片、视频等,用‘rb’模式打开文件即可:
f=open('/Users/laplas/test.jpg','rb') f.read()
要读取非 UTF-8 编码的文本文件,需要给open()函数传入 encoding参数,例如,读取GBK 编码的文件:
f = open('/Users/laplas/gbk.txt', 'r', encoding='gbk')
遇到有些编码不规范的文件,你可能会遇到UnicodeDecodeError,因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况,
open()函数还接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略:
f = open('/Users/laplas/gbk.txt', 'r', encoding='gbk',errors='ignore')
由于文件读写时都有可能产生 IOError,一旦出错,后面的 f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,
我们可以使用 try ... finally 来实现:
try: f = open('/path/to/file', 'r') f.read() finally: if f: f.close()
但是每次都这么写实在太繁琐,所以, Python 引入了 with 语句来自动帮我们调用 close()方法:
with open('/path/to/file', 'r') as f: f.read()
这和前面的 try ... finally 是一样的,但是代码更佳简洁,并且不必调用f.close()方法。
for line in f.readlines(): line.strip()# 删掉空格,换行,制表符等
例,data.txt的内容如下:
编号 | 密度 | 含糖率 | 好瓜 |
1 | 0.697 | 0.46 | 1 |
2 | 0.774 | 0.376 | 1 |
3 | 0.634 | 0.264 | 1 |
4 | 0.608 | 0.318 | 1 |
5 | 0.556 | 0.215 | 1 |
6 | 0.403 | 0.237 | 1 |
7 | 0.481 | 0.149 | 1 |
8 | 0.437 | 0.211 | 1 |
9 | 0.666 | 0.091 | 0 |
10 | 0.243 | 0.0267 | 0 |
11 | 0.245 | 0.057 | 0 |
12 | 0.343 | 0.099 | 0 |
13 | 0.639 | 0.161 | 0 |
14 | 0.657 | 0.198 | 0 |
15 | 0.36 | 0.37 | 0 |
16 | 0.593 | 0.042 | 0 |
17 | 0.719 | 0.103 | 0 |
从data.txt中读取数据
data=[]
with open('data.txt','r') as f:
f.readline()
while True:
line=f.readline()
if not line:
break
temp=line.split()
data.append(temp)
二、写文件
1. Python内置函数
f=open('/Users/laplas/data.txt','w') 'w'表示写文本文件,'wb'表示写二进制文件
f.write('Hello,world!') 写文件
f.close() 关闭文件
只有调用 close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到
磁盘,剩下的丢失了。所以,还是用with语句来得保险:
with open('/Users/michael/test.txt', 'w') as f:
f.write('Hello, world!')
要写入特定编码的文本文件,请给 open()函数传入 encoding 参数,将字符串自动转换成指定编码。