1.文件类型:文本文件和二进制文件

  硬盘中的文件保存为01010101格式,一般读取文件是把文件从硬盘中读取到内存中。

  • 文本文件需要进行格式转换才能读取出来。
  • 二进制文件一般用于传输

  

  二进制文件:视频图片

  

2.文件打开模式

  

几种不同的读取和遍历文件的方法比较:

如果文件很小,read()一次性读取最方便;
如果不能确定文件大小,反复调用read(size)比较保险;
如果是配置文件,调用readlines()最方便。
普通情况,使用for循环更好,速度更快。

  

3.r rb读模式 

(1)r 读模式

f = open(file='D:/工作日常/兼职白领学生空姐模特护士联系方式.txt',mode='r',encoding='utf-8')
data = f.read()
f.close()
file='D:/工作日常/兼职白领学生空姐模特护士联系方式.txt'  表示文件路径
mode='r' 表示只读(可以修改为其他)
encoding='utf-8' 表示将硬盘上的 0101010 按照utf-8的规则去“断句”,再将“断句”后的每一段0101010转换成unicode的 01010101,unicode对照表中有01010101和字符的对应关系。
f.read() 表示读取所有内容,内容是已经转换完毕的字符串。
f.close() 表示关闭文件

  PS: 此处的encoding必须和文件在保存时设置的编码一致,不然“断句”会不准确从而造成乱码。

 (2)rb 二进制读模式

  二进制模式,通常用来读取图片、视频等二进制文件。

  注意,它在读写的时候是以bytes类型读写的,因此获得的是一个bytes对象而不是字符串。在这个读写过程中,需要自己指定编码格式。在使用带b的模式时一定要注意传入的数据类型,确保为bytes类型。

  

  (3)智能检测编码工具:chardet

# 安装包
C:\Users\liangshuo>pip install chardet # 代码
import chardet
f = open('file_2_gbk.txt',mode='rb' )
data = f.read()
result = chardet.detect(data)
print(result) #
{'confidence': 1.0, 'encoding': 'ascii', 'language': ''}

  

  (4)编码问题

注意:

文件操作时,以 “r”或“rb” 模式打开,则只能读,无法写入;
硬盘上保存的文件都是某种编码的0101010,打开时需要注意:
rb,直接读取文件保存时原生的0101010,在Python中用字节类型表示
r和encoding,读取硬盘的0101010,并按照encoding指定的编码格式进行断句,再将“断句”后的每一段0101010转换成unicode的 010101010101,在Python中用字符串类型表示

4.w wb写模式

(1)w模式

f = open(file='D:/工作日常/兼职白领学生空姐模特护士联系方式.txt',mode='w',encoding='utf-8')
f.write('北大本科美国留学一次50,微信号:xxxxx')
f.close()
file='D:/工作日常/兼职白领学生空姐模特护士联系方式.txt'     表示文件路径
mode='w' 表示只写
encoding='utf-8' 将要写入的unicode字符串编码成utf-8格式
f.write(...) 表示写入内容,写入的内容是unicode字符串类型,内部会根据encoding转换为制定编码的 01101010101,即:字节类型

  (2)wb模式

f = open(file='D:/工作日常/兼职白领学生空姐模特护士联系方式.txt',mode='wb')
f.write('北大本科美国留学一次50,微信号:xxxxx'.encode('utf-8'))
f.close()
file='D:/工作日常/兼职白领学生空姐模特护士联系方式.txt'      表示文件路径
mode='wb' 表示只以2进制模式写
f.write(...) 表示写入内容,写入的内容必须字节类型,即:是某种编码格式的0101010

  

  (3)编码问题

注意:

文件操作时,以 “w”或“wb” 模式打开,则只能写,并且在打开的同时会先将内容清空。

写入到硬盘上时,必须是某种编码的0101010,打开时需要注意:

wb,写入时需要直接传入以某种编码的0100101,即:字节类型
w 和 encoding,写入时需要传入unicode字符串,内部会根据encoding制定的编码将unicode字符串转换为该编码的 010101010

5.a ab追加模式

f = open("兼职白领学生空姐模特护士联系方式.txt",'a',encoding="gbk")

f.write("\n杜姗姗 北京  167 49 13324523342")
f.close() #
姓名 地区 身高 体重 电话
况咏蜜 北京 171 48 13651054608
......
岳妮妮 深圳 177 54 18835324553
贺婉萱 深圳 174 52 18933434452
叶梓萱 上海 171 49 18042432324
杜姗姗 北京 167 49 13324523342 #这行是添加的
文件操作时,以 “a”或“ab” 模式打开,则只能追加,即:在原来内容的尾部追加内容

写入到硬盘上时,必须是某种编码的0101010,打开时需要注意:

ab,写入时需要直接传入以某种编码的0100101,即:字节类型
a 和 encoding,写入时需要传入unicode字符串,内部会根据encoding制定的编码将unicode字符串转换为该编码的 010101010

6.混合模式r+ w+

  (1)r+ 读写模式

f = open('file_2_gbk.txt',mode='r+' )
data = f.read() # 读内容
print(data)
f.write('\nthis is last') #写内容
f.close()

  

  (2)w+写读模式(没用)

w+会先把文件清空,再写新内容,
相比w模式,只是支持了一个读功能,且还只能读已经写入的新内容。着实没什么卵用。。。
  

7. with关键字

with关键字用于Python的上下文管理器机制。为了防止诸如open这一类文件打开方法在操作过程出现异常或错误,或者最后忘了执行close方法,文件非正常关闭等可能导致文件泄露、破坏的问题。Python提供了with这个上下文管理器机制,保证文件会被正常关闭。在它的管理下,不需要再写close语句。注意缩进。

with open('test.txt', 'w') as f:
f.write('Hello, world!')

with支持同时打开多个文件:

with open('log1') as obj1, open('log2','w') as obj2:
s=obj1.read()
obj2.write(s)

8.遍历文件

实际上,更多的时候,我们将文件对象作为一个迭代器来使用。

f = open('file_2_gbk.txt',mode='r' )
for line in f:
print(line,end='')
f.close() #
111111111
22222222
33333333
4444444

这个方法很简单, 不需要将文件一次性读出,但是同样没有提供一个很好的控制,与readline方法一样只能前进,不能回退。

												

1. [文件]- 文件类型,文件open模式的更多相关文章

  1. 文件元数据、文件夹操作(day08)

    一.获取文件的元数据(meta data) 通过read write可以对文件的内容进行读写. 但是今天我们要操作的是文件的元数据(文件的属性信息) day08$ls -l hello -rw-rw- ...

  2. python第六篇文件处理类型

    阅读目录 一 文件操作 二 打开文件的模式 三 操作文件的方法 四 文件内光标移动 五 文件的修改   文件处理                                             ...

  3. 为archlinux终端ls不同类型文件设置不同显示颜色

    title: 为archlinux终端ls不同类型文件设置不同显示颜色 date: 2017-11-13 20:53:55 tags: linux categories: linux archlinu ...

  4. 如何在Qt资源文件中包含和释放exe等各种类型文件?

    操作系统:Windows 10 X64 企业版 Qt: 5.8.0 QtCreater: 4.2.1 刚刚开始学习Qt,不断遇到困难和挑战,前几天在各个QQ群里询问如何在Qt的资源文件中包含和释放ex ...

  5. FTP文件传输协议两种模式 ftp协议集,错误码集,ftp客户端命令集

    TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20.FTP协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置.联接的方式.甚至是是否使用相同的操 ...

  6. 第三天:字典表dict、元组tuple、文件与类型汇总

    1.字典表dict 声明 {键: 值,...} dict(键=值) d = {'isbn':'13123','title':'python入门'} #字典表中的键不能使用诸如列表这种可以改变的,只能使 ...

  7. linux安装PyCharm,PyCharm常用快捷键及调试模式,pycharm里面对文件夹或者文件进行重命名

    PyCharm常用快捷键及调试模式 2017年10月18日 23:13:43 菜鸟之神 阅读数:5835    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn ...

  8. 手把手教你用 Spring Boot搭建一个在线文件预览系统!支持ppt、doc等多种类型文件预览

    昨晚搭建环境都花了好一会时间,主要在浪费在了安装 openoffice 这个依赖环境上(Mac 需要手动安装). 然后,又一步一步功能演示,记录,调试项目,并且简单研究了一下核心代码之后才把这篇文章写 ...

  9. python文件对象几种操作模式区别——文件操作方法详解

    文件对象的字节模式/b模式(以utf-8编码为例) 读操作 写操作 指针操作 ASCII字节 返回bytes/字节类型的Ascii 写入bytes类型字节 例如:b'This is ascii' 使用 ...

  10. C# pdb类型文件的作用之一:记录具体异常的关键信息,如文件路径和行号

    pdb 是 Program Debug Database 的简称: 背景 我负责的一个Services(服务)出问题了,原因是一个 dll 内部逻辑出问题了: 在本地修改源码后,重新生成dll(Deb ...

随机推荐

  1. css中padding与margin

    CSS padding margin border属性详解 图解CSS padding.margin.border属性W3C组织建议把所有网页上的对像都放在一个盒(box)中,设计师可以通过创建定义来 ...

  2. C++项目规范

    https://segmentfault.com/a/1190000007659754

  3. Redis学习---Redis的免密操作

    Redis的免密操作 问题解决[方式一]:当前这种linux配置redis密码的方法是一种临时的,如果redis重启之后密码就会失效 1.首先进入redis,如果没有开启redis则需要先开启: [r ...

  4. windows安装及配置mysql5.7

    引子 mysql官方网站上没有 windows mysql5.7 64位版本msi的安装包下载,我们可以通过zip版本解压缩后手动安装配置环境. msi安装的话有32位的,基本上就是看着图形界面来一步 ...

  5. spring-springmvc-hibernate项目小结

    1. web.xml中别忘记加入spring监听器 <listener> <listener-class>org.springframework.web.context.Con ...

  6. November 15th 2016 Week 47th Tuesday

    Success is finding satisfaction in giving a little more than you take. 成功就是付出比得到多,仍然心满意足. Can I find ...

  7. Mysql 安装服务无法启动解决方案与使用的一般使用指令

    问题描述: 在安装mysql 时,如果第一次没安装成功,第二次重装可能出现莫名奇妙的情况.通过一番尝试,发现,安装往上的教程还是无法成功安装的主要原因是第一次安装虽然未成功,但是mysql 默认的33 ...

  8. mysql 注入基础知识

    (1)注入的分类---仁者见仁,智者见智. 下面这个是阿德玛表哥的一段话,个人认为分类已经是够全面了.理解不了跳过,当你完全看完整个学习过程后再回头看这段.能完全理解下面的这些每个分类,对每个分类有属 ...

  9. 一劳永逸部署项目:通过tomcat加载环境变量

    一劳永逸部署项目:通过tomcat加载环境变量 转载自:https://blog.csdn.net/u010414666/article/details/46499953 一.说明 项目中经常会用到x ...

  10. 在linux中禁用一块硬盘

    笔记本采用固态加机械的硬盘组合使用中完全用不到机械部分 但它总是在启动后运行并发出响声 1 启动后的禁用 无需重启 (sdx是你的磁盘  udev的更新可能会导致磁盘重新出现 在向系统添加/删除磁盘也 ...