在這裏插入代碼片
@[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")
重命名文件
-
修改文件:
- 打開文件和文件副本
- 讀取文件,寫入副本
- 刪除原文件,重命名副本