2.2.1 python 文件处理 - 读文件

文件处理分为 读、写、修改

  • 读文件

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

示例1:指定编码读文件

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: 二进制模式读文件  

f = open(file='D:/工作日常/兼职白领学生空姐模特护士联系方式.txt',mode='rb')
data = f.read()
f.close()

#file='D:/工作日常/兼职白领学生空姐模特护士联系方式.txt'      表示文件路径
#mode='rb'                                            表示只读(可以修改为其他)
#f.read()                                             表示读取所有内容,内容是硬盘上原来以某种编码保存的 010101010,即:某种编码格式的字节类型
#f.close()                                            表示关闭文件

问题:示例2和示例1的区别在哪?

答:在于示例2打开文件时并未指定encoding,这是为何?是因为直接以rb模式打开了文件 ,rb是指二进制模式,数据读到内存里直接是bytes格式,如果想内容,还需要手动decode,因此在文件打开阶段,不需要指定编码

问题:假如你不知道你要处理的文件是什么编码可怎么办呢?

          智能检测编码 :

import chardet

f = open('log',mode='rb')
data = f.read()
f.close()

result = chardet.detect(open('log',mode='rb').read())
print(result)

#输出:

{'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}


'''
chardet 模块  根据编码的特征、规律.
第三方模块,需要安装
'''

 

注意:

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

 循环文件

    防止文件过大,占满内存。循环处理文件,边读边处理

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

for line in f:
    print(line)

f.close()

 

转载于:https://my.oschina.net/devopsxin/blog/1923283

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值