2022-11-18 ★ 小结 1-18 文件操作

文件操作(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就会被理解成换行…用原始字符串就会“还原字符原本的样子”,不用写那么多\来解决转义符的问题

文本文件的写入

基本的文件写入操作

文本文件的写入的三个步骤:

  1. 创建文件对象~f = open('a.txt','a')
  2. 写入数据 ~f.write()
  3. 关闭文件对象 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())方法,再关闭文件,释放文件对象
为了确保打开文件对象正常关闭,已办结合异常机制的finallyw

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值