1. 程式人生 > >一. python進階(文件的讀寫編碼)

一. python進階(文件的讀寫編碼)

with 偏移 sleep 案例 style ignore encode family 函數

一. 讀取文件

過程:
   打開文件
   讀文件內容
   關閉文件

打開文件:
       open(path,flag,[encoding [ERRORS]])
        path:要打開文件的路徑
        flag :打開方式
            * r      以只讀的方式打開文件 文件法人描述符放在開頭     
            * rb     以二進制格式打開一個文件用於只讀 文件的描述符放在開頭  (二進制用來加密)
              r+     打開一個文件用於讀寫 文件的描述符放在開頭
            
* w 打開一個文件只用於寫入 如果該文件已經存在會覆蓋 如果不存在則創建新文件 * wb 打開一個文件只用於寫入二進制 如果該文件已經存在會覆蓋 如果不存在則創建新文件 * w+ 打開一個文件用於讀寫 a 打開一個文件用於追加 如果文件存在 文件描述符將會放到文件末尾 a+ encoding 編碼格式 常用的的是utf-8 ERRORS 錯誤處理

1.read() 與rend(參數)

# 打開文件
path=r"D:\Studypython\py2\1\01.txt"
# 忽略錯誤  ignore
# f=open(path,"r",encoding="utf-8",errors="ignore")
f=open(path,"r",encoding="utf-8")
# 讀文件內容
# 讀取文件裏的所有內容    read()
str1=f.read()
print(str1)  

# my name is 哈哈哈
# i lover you to
# 哈哈哈哈啦啦啦
# 關閉文件
# 打開文件

path=r"D:\Studypython\py2\01.txt
" # 忽略錯誤 ignore # f=open(path,"r",encoding="utf-8",errors="ignore") f=open(path,"r",encoding="utf-8") # 讀文件內容 # 讀取文件裏面10個字符 read(10) # 讀取文件裏指定字符數read(n) str1=f.read(10) print(str1) # my name is # 關閉文件

2.readline() 與 readline(參數) readlines()

# 打開文件
path=r"D:\Studypython\py2\01.txt"
# 忽略錯誤  ignore
# f=open(path,"r",encoding="utf-8",errors="ignore")
f=open(path,"r",encoding="utf-8")

# 讀文件內容
#讀取文件裏內容一整行  包括換行符 /n                     readline
str1=f.readline()   
print(str1)   # my name is 哈哈哈
# 關閉文件




path=r"E:\Studypython\py2\01.txt"
# 忽略錯誤  ignore
# f=open(path,"r",encoding="utf-8",errors="ignore")
f=open(path,"r",encoding="utf-8")

# 讀文件內容
  讀取指定字符串    
str1=f.readline(10)   
print(str1)   # my name is 哈哈哈
# 打開文件
path=r"D:\Studypython\py2\01.txt"
# 忽略錯誤  ignore
# f=open(path,"r",encoding="utf-8",errors="ignore")
f=open(path,"r",encoding="utf-8")

# 讀文件內容
#讀取文件裏內容 所有行    並返回列表                    readlines
str1=f.readlines()   
print(str1)   # my name is 哈哈哈
#[‘my name is 哈哈哈\n‘, ‘\n‘, ‘i lover you to\n‘, ‘\n‘, ‘哈哈哈哈啦啦啦‘]
# 關閉文件
# 打開文件
path=r"D:\Studypython\py2\01.txt"
# 忽略錯誤  ignore
# f=open(path,"r",encoding="utf-8",errors="ignore")
f=open(path,"r",encoding="utf-8")
# 讀文件內容
# 若給定的數字大於0 返回實際size節的行數
str1=f.readlines(25)   
print(str1)   
# [‘my name is 哈哈哈\n‘, ‘\n‘, ‘i lover you to\n‘]
# 關閉文件
f.close()

3. seek (str) 表示從第字符開始文件內容

# fileObject.seek(offset[, whence])
# 參數
# offset -- 開始的偏移量,也就是代表需要移動偏移的字節數
# whence:可選,默認值為 0。給offset參數一個定義,表示要從哪個位置開始偏移;0代表從文件開頭開始算起,1代表從當前位置開始算起,2代表從文件末尾算起。
# 返回值

# 打開文件
path=r"D:\Studypython\py2\01.txt"
# 忽略錯誤  ignore
# f=open(path,"r",encoding="utf-8",errors="ignore")
f=open(path,"r",encoding="utf-8")
# 讀文件內容
# 修改描述符的位置
# seek (str)  表示從第字符開始文件內容
# seek() 方法用於移動文件讀取指針到指定位置。
f.seek(10)
str1=f.read()   
print(str1)   
#  哈哈哈
# i lover you to
# 哈哈哈哈啦啦啦
# 關閉文件
f.close()
# 打開文件讀文件的一個完整的過程  方法一
# 
path=r"E:\Studypython\py2\1\01.txt"

try:
    f=open(path,"r",encoding="utf-8")
    str1=f.read()   
    print(str1)   

finally:
    if f:

       f.close()

# my name is 哈哈哈

# i lover you to

# 哈哈哈哈啦啦啦
# 關閉文件
# 打開文件讀文件的一個完整的過程  方法二

with open(path,"r",encoding="utf-8") as f2:
     print(f2.read())

#      my name is 哈哈哈
# i lover you to
# 哈哈哈哈啦啦啦

二 .寫文件

# 寫文件
path=r"E:\Studypython\py2\1\02.txt"
f=open(path,"w",encoding="utf-8")
# 1 將信息寫入緩沖區
f.write("my name is hao do you do")
# 2 刷新緩沖區
#  直接把內部緩沖區的數據立刻寫入文件, 而不是被動的等待 自動刷入緩沖區

f.flush()
while True:
    pass
f.close()
# 寫文件
import time
path=r"E:\Studypython\py2\1\03.txt"
f=open(path,"w",encoding="utf-8")
# 1 將信息寫入緩沖區
# 2 刷新緩沖區
#  直接把內部緩沖區的數據立刻寫入文件, 而不是被動的等待 自動刷入緩沖區

# f.flush()
while 1:
     f.write("my name is hao do you doLLLLLLLLLLLLLLLLLLLLLLLLLLLL")
     f.flush()
     time.sleep(0.1)
f.close()
# 寫文件
import time

# 簡易寫法 寫文件    
# 這種寫法不用關閉和刷新
path=r"D:\Studypython\py2\1\04.txt"
with open(path,"a",encoding="utf-8")as f2:

    f2.write("哈哈哈哈哈啊哈哈哈哈啊哈哈哈哈哈哈哈哈")

1.案例

path=r"D:\Studypython\py2\1\05.txt"
# 註意編碼和解碼的字符集要一致
# 寫入文件編碼
with open(path,"wb")as f2:
    str="my name is haha  heee1s 張三豐"
    f2.write(str.encode("utf-8"))

# 讀文件解碼
with open(path,"rb") as f3:
   data=f3.read()
   print(data)               #  b‘my name is haha  heee1s‘  帶b的二進制
   print(type(data))         #  <class ‘bytes‘>             字節類型
   
   newData=data.decode("utf-8")
 
   print(newData)
import pickle  #數據持久性模塊


# 寫入文件
path=r"E:\Studypython\py2\2\01.txt"
mylist=[1,2,3,4,5,6,"sumk is a good man fffffffffffffffffffffffffffffffffffffffffffff"]

f=open(path,"wb")
pickle.dump(mylist,f)
f.close()
# 用於序列化的兩個模塊
#   json:用於字符串和Python數據類型間進行轉換
#   pickle: 用於python特有的類型和python的數據類型間進行轉換
#   json提供四個功能:dumps,dump,loads,load
#   pickle提供四個功能:dumps,dump,loads,load

# pickle可以存儲什麽類型的數據呢?
# 所有python支持的原生類型:布爾值,整數,浮點數,復數,字符串,字節,None。
# 由任何原生類型組成的列表,元組,字典和集合。
# 函數,類,類的實例


# 讀取文件
f2=open(path,"rb") 
timelist=pickle.load(f2)
print(timelist)
f2.close()  
# [1, 2, 3, 4, 5, 6, ‘sumk is a good man fffffffffffffffffffffffffffffffffffffffffffff‘]

三. 編碼

一. python進階(文件的讀寫編碼)