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(編碼方式)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章