with open使用方法

昨晚在级群有个同学提出一个问题需要去读文件每一行的倒数18个字符并写到另一个文件中,一开始以为用Python三行代码应该能够解决,但写了二十分钟才真正解决问题。

首先需要知道的是要使用到两个模块。codecs和chardet

完整代码如下:(把text.txt中需要的字符串读取到text2.txt中)

import codecs
import chardet
with open(r'D:\py\text.txt','rb') as f1:
    charset = chardet.detect(f1.read())
with codecs.open(r'D:\py\text.txt','r',charset['encoding']) as f1,codecs.open(r'D:\py\text2.txt','w','utf-8')as f2:
    for line in f1.readlines():
        f2.write(line[-18:])
codecs的使用方法参考代码。

with.codecs.open()与with open()这两种方法使用环境不一样,其中第一种是可以定义读文件时候的编码方式。(每个txt文件都有对应的一个编码方式)

而要获取文件的编码方式需要借助chardet模块(这个模块好像要自行安装,之前我曾经安装过,所以我没有提示要安装)

chardet.detect()返回的是一个字典格式。

{'confidence': 1.0, 'language': '', 'encoding': 'UTF-16'}     这是我的text.txt返回的字典

其中第一个键值是可能性,第二个键值是编码方式。字典内容说明这个文件的编码方式以及该可能性大小。

最后说明一下with open的使用格式。

with open(’文件名‘,‘读写方式’)as f:
    f.read()  #读取是整个文件
    f.readline()  #读取第一行
    f.readlines()    #读取每一行,可以结合for使用(参考我上述完整代码),记得都要带方法都要带括号,不然返回的是内存地址

还有,Python有回收机制,f.close()在程序结束时候会调用(在callback回调函数里面??)

最后参考了一些网上大神的帖子。http://www.cnblogs.com/ArsenalfanInECNU/p/4811643.html(编码方式)


  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值