1. 程式人生 > >Python之讀寫文本數據

Python之讀寫文本數據

好的 輸出數據 字節數 python amp erro write data with open

知識點不多

普通操作

# rt 模式的 open() 函數讀取文本文件
# wt 模式的 open() 函數清除覆蓋掉原文件,write新文件
# at 模式的 open() 函數添加write新文件
with open("../../testData","rt",encoding="utf-8") as f :
    for line in f :
        print(line)


# 寫操作默認使用系統編碼,可以通過調用 sys.getdefaultencoding() 來得到,也以通過傳遞一個可選的 encoding 參數給open()函數,幾個常見的編碼是ascii, latin-1, utf-8和utf-16
# 關於換行符的識別問題:在Unix和Windows中是不一樣的(分別是 \n 和 \r\n )。 默認情況下,Python會以統一模式處理換行,識別普通換行符並將其轉換為單個 \n 字符 # 如果你不希望這種默認的處理方式,可以給 open() 函數傳入參數 newline=‘‘ f =open(somefile.txt, rt, newline=‘‘) # 最後一個問題就是文本文件中可能出現的編碼錯誤 # 如果修改了編碼方式之後,編碼錯誤還是存在的話,你可以給 open() 函數傳遞一個可選的 errors 參數來處理這些錯誤。 m = open(sample.txt
, rt, encoding=ascii, errors=replace) # 如果你經常使用 errors 參數來處理編碼錯誤,也是不好的。 # 原則是確保你總是使用的是正確編碼。當模棱兩可的時候,就使用默認的設置(通常都是UTF-8)。
打印輸出至文件中
with open(../../testData, at) as f:
    print(Hello python!, file=f)

# 使用其他分隔符或行終止符打印
# 使用 print() 函數輸出數據,但是想改變默認的分隔符或者行尾符,使用sep  end
print("hello
","cool","zzy",sep="***",end="!") # hello***cool***zzy! #使用 str.join() print("***".join(("hello","cool","zzy"))) # hello***cool***zzy # 對比 row = ("hello","cool","zzy") print(*row,sep="***") # hello***cool***zzy
讀寫字節數據
# 讀寫二進制文件,比如圖片,聲音文件,使用模式為 rb 或 wb 的 open() 函數

# 在讀取二進制數據的時候,字節字符串和文本字符串的語義差異可能會導致一個潛在的陷阱:索引和叠代動作返回的是字節的值而不是字節字符串
a=Hello World
print(a[0])   # H

b = bHello World  # Byte string
print(b[0])  # 72  索引和叠代動作返回的是字節的值而不是字節字符串


# 如果你想從二進制模式的文件中讀取或寫入文本數據,必須確保要進行解碼和編碼操作
# 解碼
with open("../../testDta","rb") as f :
    data=f.read(16)
    text=data.decode("utf-8")

# 編碼
with open("../../testDta","wb") as d :
    text="hello"
    f.write(text.encode("utf-8"))

Python之讀寫文本數據