python-編碼和文件操作

在這裏插入代碼片@[toc]

1、encoding

  • 常見編碼
    • ASCII:不支持中文,支持英文、數字、符號;使用1個字節
    • GBK(國標):支持中文、英文、數字、符號;使用2個字節(英文中文都一樣)
    • unicode(萬國碼):支持中文、英文、數字、符號;使用4個字節(英文中文都一樣)
    • utf-8(長度可變的萬國碼):支持中文、英文、數字、符號
      • 英文(使用1個字節);中文(使用3個字節)
  • 編碼相關知識
    • python3中,程序運行期間,使用的都是unicode,顯示所有的內容
    • Pycharm中默認爲utf-8
    • 傳輸和存儲都是使用bytes類型,格式爲b’編碼後的內容’
  • encode() 編碼函數
  • decode() 解碼函數
In [77]: s = 'I am hhh'

In [79]: s.encode()
Out[79]: b'I am hhh'

In [80]: s = b'I am hhh'

In [81]: s.decode()
Out[81]: 'I am hhh'

2、file

(1)文件操作的函數

  • 文件是可迭代對象
  • 文件的操作是根據光標位置進行的
  • 文件分爲文本文件和非文本文件
    • 文本文件
      • open([路徑], mode="r/w/a", encoding="字符集(編碼解碼方式)") 打開一個文件
      • 關於路徑:
        • 絕對路徑,包括本機和互聯網的路徑(多用於服務器,如log)
        • 相對路徑,相對於本程序的路徑(../表示上一級目錄./表示本級目錄)
      • file.read([number]) 返回整個文件,number爲讀取的字符個數
      • file.readline() 返回一行
        • 文件是可迭代對象,可以用for循環讀文件
      • file.write() 往文件裏寫入(可用模式爲w、a)
    • 非文本文件
      • open([路徑], mode="rb/wb/ab") 打開非文本文件,注意操作非文本文件時不要加encoding
  • file.close() 關閉文件,打開文件後一定要關閉文件
In [82]: f = open('./test.txt', mode='w', encoding='utf-8')

In [83]: f.write('aaaa\nbbbb\ncccc')
Out[83]: 14

In [84]: f.close()

In [85]: f = open('./test.txt', mode='r', encoding='utf-8')

In [86]: for line in f:
    ...:     print(line)  # 這裏print語句會自動加一個換行符,所以結果多輸出了一個換行符
    ...:     
aaaa

bbbb

cccc

In [87]: f.close()

(2)文件操作的模式

  • 模式:r, w, a, a+, w+, a+, rb, wb, ab, r+b, w+b, a+b
    • r:只讀(光標默認從文件開頭開始)
    • w:寫操作,會清空原文件,如果原文件不存在會創建新文件
    • a:追加,即append
    • b:bytes,處理非文本文件
    • r+:在讀後可以直接進行其它操作(讀寫同時存在模式)
      • 注意:無論讀取了多少內容,寫入的內容都在末尾
    • w+:寫讀模式
      • 注意:寫後光標在最末尾,要讀取的話需要移動光標
    • a+:同w+
    • r+b, w+b, a+b:操作非文本文件,類似r+、w+、a+

(3)常用操作

  • 光標(seek)
    • fiel.seek([偏移量], [偏移量參考位置])
      • 0表示開始處,1表示當前位置,2表示末尾處
    • file.seek(0) 移動光標到文件開始處
    • file.seek(0, 2) 移動光標到末尾
  • file.tell() 返回光標當前位置
  • file.truncate([number]) 截斷操作,從文件開頭截斷到number處,默認截斷到光標處

(4)文件操作

  • 使用下面方式打開文件,可以不用寫close

    with open(...) as f1 [, open(...) as f2, ...]:
        pass
    
    • 這樣寫的話,文件對象就是f1 f2 ···
    • 可以打開多個文件
    • 該語法實際上是觸發了文件對象的__enter__()方法和__exit__()方法
  • import os 導入os模塊

    • os.remove("file_name") 刪除文件
    • os.rename("file_name") 重命名文件
  • 修改文件:

    • 打開文件和文件副本
    • 讀取文件,寫入副本
    • 刪除原文件,重命名副本
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章