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(编码方式)


你可能感兴趣的:(python)