文章目录
文件操作(IO技术)
文本文件和二进制文件
按文件中数据组织形式,分成文本文件和二进制文件两大类
- 文本文件
- “字符”文本
- 默认unicode字符集,两个字节表示一个字符 ,最多可以表示65536个
- 用记事本可以打开
- word软件编辑的文档不是文本文件
- 二进制文件
- 吧数据内容用:“字节”进行存储
- 无法用记事本打开
- 要使用专用的软件解码
- 视频、doc、图片等等
文件操作相关模块
这次主要学了:
io、os、cvs、pickle、zipfile
open()
创建文件对象
格式
open(文件名[,打开方式])
打开方式包括:
r:读模式
w:写模式(无中生有、有则重写)
a:追加,append,无中生有,有则续写
b:二进制模式(可与其他模式组合使用;图片等非文本文件)
+:读、写模式(可与其他模式组合使用)
文件名要点:
如果只是文件名,代表在当前录下的文件open('a.txt','a') 文件名可以录入全路径比如:
d:\a\b.txt`
为了减少\的输入,可以使用原始字符串:r"d:\b.txt"
示例:
f = open(r"d:\b.txt","w")
如果文件名是“note.txt",d:\note.txt
中的\n
就会被理解成换行…用原始字符串就会“还原字符原本的样子”,不用写那么多\
来解决转义符的问题
文本文件的写入
基本的文件写入操作
文本文件的写入的三个步骤:
- 创建文件对象~
f = open('a.txt','a')
- 写入数据 ~
f.write()
- 关闭文件对象
f.close()
注意:一定要关闭文件对象,否则占用资源
编码知识_中文乱码问题解决
常用编码介绍
- ASCII:7位,表示128个字符,西语字符+数字
- ISO8859-1:8位,256个字符,兼容ASCII
- GB系列
- GB2312,一般交流够了
- GBK,几万个
- GB18030,汉字、藏文、彝文…
- 英文1个字节,汉字2个字节
- 0-127就是英文,ASCII
- 0-256,ISO8859-1
- 往后的就是汉字
- UTF-8
- 变长编码
- 1-4个字节表示1个字符:英文1个字节,汉字3个字节
- Unicode
- 万国码,Universal code
- 定长编码
- 2个字节表示1个字符
- 2个字节可以表示65536个
- 阻力:英文字母也是2个字符表示1个字符,但信息世界大部分是英文,会造成很多资源浪费
- 存储用Unicode,实际实现用UTF-8
乱码问题
乱码通常都是GBxxx系列造成的,因为GBxxx与UTF-8不兼容,编码用一个,解码用另一个造成的
建议
一般用UTF-8编程使用
中文乱码问题
windows操作系统默认编码:GBK
Linx操作系统默认编码:UTF-8
当我们使用open(),调用的是操作系统打开的文件,默认编码是GBK
#测试写入中文
# f = open(r"b.txt","w") # 调用操作系统,生成一个b.txt文件,默认GBK编码
f = open(r"b.txt","w",encoding="UTF-8") # 只要把创建文件的时候改成用UTF-8解码就可以了
f.write("尚学堂\n百战程序员\n") # 程序中用的是Unicode,写入时,系统转成GBK写入文档
f.close()
关闭流
write() writelines()写入数据
write(a):把字符串a写入到文件中,写不了列表
writelines(a):把列表a写入到文件中,但不添加换行符,需要自行添加换行符\n
close()关闭文件流
文件底层是操作系统控制的,所以我们打开的文件对象必须显式调用close()方法关闭文件对象
当调用close()方法的时候,首先会把缓冲区数据写入文件(也可以直接调用flush()
)方法,再关闭文件,释放文件对象
为了确保打开文件对象正常关闭,已办结合异常机制的finally
或w