1. [文件]- 文件类型,文件open模式

时间:2021-11-11 17:01:14

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

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

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

  1. [文件]- 文件类型,文件open模式

  二进制文件:视频图片

  1. [文件]- 文件类型,文件open模式

 

2.文件打开模式

   1. [文件]- 文件类型,文件open模式

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

如果文件很小,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类型。

  1. [文件]- 文件类型,文件open模式

 

  (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()

  1. [文件]- 文件类型,文件open模式

  (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方法一样只能前进,不能回退。