第3章文件与数据的存储
Python以简洁见长,在其他语言中比较复杂的文件读写和数据IO,在Python中由于比较简单的语法和丰富的类库而显得尤为方便。本章将从最简单的文本文件的读写出发,重点介绍CSV文件的读写和操作数据库,同时介绍一些其他形式的数据的存储方式。
3.1Python中的文件
3.1.1基本的文件读写
谈到Python中的文件读写,总会使人想到“open”关键字,其最基本的操作如下面的示例:
# 最朴素的open()方法
f=open('filename.text','r')
# 做点事情
f.close()
# 使用with,在语句块结束时会自动关闭
with open('t1.text','rt') as f: # r代表read,t代表text,一般“t”为默认,可省略
content=f.read()
with open('t1.txt','rt') as f:
for line in f:
print(line)
with open('t2.txt', 'wt') as f:
f.write(content) # 写入
append_str='append'
with open('t2.text','at') as f:
# 在已有内容上追加写入,如果使用“w”,则已有内容会被清除
f.write(append_str)
# 文件的读写操作默认使用系统编码,一般为utf8
# 使用encoding设置编码方式
with open('t2.txt', 'wt',encoding='ascii') as f:
f.write(content)
# 编码错误总是很烦人,如果用户觉得有必要暂时忽略,可以如下
with open('t2.txt', 'wt',errors='ignore') as f: # 忽略错误的字符
f.write(content) # 写入
with open('t2.txt', 'wt',errors='replace') as f: # 替换错误的字符
f.write(content) # 写入
# 重定向print()函数的输出
with open('redirect.txt', 'wt') as f:
print('your text', file=f)
# 读写字节数据,例如图片、音频
with open('filename.bin', 'rb') as f:
data=f.read()
with open('filename.bin', 'wb') as f:
f.write(b'Hello World')
# 从字节数据中读写文本(字符串),需要使用编码和解码
with open('filename.bin', 'rb') as f:
text=f.read(20).decode('utf-8')
with open('filename.bin', 'wb') as f:
f.write('Hello World'.encode('utf-8'))
用户不难发现,在open()的参数中,第一个是文件路径,第二个是模式字符(串),代表了不同的文件打开方式,比较常用的是“r”(代表读)、“w”(代表写)、“a”(代表写,并追加内容),“w”和“a”经常引起混淆,其区别在于,如果用“w”模式打开一个已存在的文件,会清空文件里的内容数据,重新写入新的内容,如果用“a”,不会清空原有数据,而是继续追加写入内容。对模式字符(串)的详细解释见图31。