【8】python文件的讀寫方法

 

 

 

(1)、讀文件的步驟:

(1)打開文件
  open(path,flag,encoding,[errors])
  path:打開路徑
  flag:打開方式 r(只讀) rb(二進制格式) r+(能夠讀寫)
        w(只寫,存在覆蓋,不存在建立) wb(寫入二進制) w+(用於讀寫)
  a(文件存在,追加) a+()
  encoding:編碼方式
  errors:錯誤處理

(2)讀取文件


(3)關閉文件

 

(2)讀取文件的幾種方法

# 第二步:讀取文件內容 的四個方法

#1:方法1-讀取文件的所有內容[只適合讀取小的文件,否則費內存]
str1=f.read()
print(str1)

# 2 方法2-讀取指定字符數
str2=f.read(10)
print(str2)
str3=f.read(2)
print(str3)


'''
輸出:
def proces
sF
總結:文件不關閉的狀況下,讀完一次,指針在最後邊,繼續讀2個字符信息。
'''


# 3 方法3-每次讀取一行數據,包括‘\n’
# str4=f.readline()
str4=f.readline(10)     #表示讀取一行的10個字符
print(str4)


# 4 方法4-讀取方式4  讀取全部行並返回列表
list7=f.readlines()
list7=f.readlines(22)     #每行讀取這麼多
print(list7)

(3)關閉文件

# 第三步:關閉文件
f.close()

 

【總結】:完整的兩種讀文件方式

方法1:python

try:
    f1=open(path,'r',encoding='utf8',errors='ignore')
    print(f1.read())
except:
    print("文件讀取出錯!")
finally:
    if f1:
        f1.close()

 

方法2:帶with的自動關閉文件的方式程序員

# 方法2  with 自動關閉文件

path=r'E:\[AAA]全棧學習python\day2\file1.txt'
try:
    with open(path) as file_obj:
        content=file_obj.read()
        print(content)
except:
    print("讀取失敗!")

 

 

1、原生態三步法寫入文件

# 文件寫入

# 第一步:打開文件
path=r"E:\[AAA]全棧學習python\day2\file2.txt"
f=open(path,'w')

# 第二步:寫文件
#1 這裏其實只是先寫入了緩衝區,可是還沒得奧文件中去,須要刷新
f.write("jiajia is a beautiful girl333 !")

# 2 刷新緩衝區,就是當即寫入文件,不寫刷新就是關閉才能寫入文件
f.flush()

# 第三步:關閉文件
f.close()

說明: flush()是及時就寫入到文件中去,沒有這個flush的話 只會等到文件關閉的時候纔會被寫入到文件。

【注意】:還有就是在寫入時候遇到'\n' 或者是緩衝區滿了也會自動刷新

 

 

案例2:用帶with自動關閉文件且追加的方式寫入

# 案例2:用帶with自動關閉文件且追加的方式寫入
with open(path,'a') as file_obj:
    file_obj.write("康忙北鼻是一個帥哥!")

# file_obj.flush() #這種方式是不須要刷新與關閉操做的。

案例3json

# 1 普通寫入一個文件信息
path=r'E:\[AAA]全棧學習python\day3\file1.txt'
with open(path,'w') as f1:
    str="I love programming"
    str2="I also like write articles"
    f1.write(str)
    f1.write(str2)

'''
輸出:
發現兩個寫入的文件信息都在一行顯示了。
I love programmingI also like write articles
解決辦法:
在每一個str 中加上換行符便可!
'''

# 2每添加一段信息 ,帶換行信息寫入如何作呢!

path2=r'E:\[AAA]全棧學習python\day3\file2.txt'
with open(path,'w') as f1:
    str="I love programming\n"
    str2="I also like write articles \n"
    f1.write(str)
    f1.write(str2)

'''
輸出
I love programming
I also like write articles 
'''


# 3 附加到文件file2
with open(path2,'a') as file_obj:
    file_obj.write("i am the first one!\n")
    file_obj.write("I AM THE SECOND ONE!\n")
    
'''
輸出:
i am the first one!
I AM THE SECOND ONE!
'''

 

 

2、二進制文件的寫入

案例1

# 存入和讀取二進制文件信息
path = r'E:\[AAA]全棧學習python\day3\file3.txt'
with open(path,'wb') as f1:
    str_bytes='I am jiyongjia !'.encode('utf-8')
    f1.write(str_bytes)

with open(path,'rb') as f2:
    str2=f2.read()
    print(str2)
    print(type(str2))

'''
輸出、
b'I am jiyongjia !'
<class 'bytes'>
咱們發現讀取的並非字符串,因此並很差處理
'''

總結:咱們發現讀取的並非字符串,因此並很差處理

 

案例2:處理以上案例,讓讀取出的信息是一個str 方便處理

# 讀取
with open(path,'rb') as f2:
    str2=f2.read()
    print(str2.decode('utf-8'))
    print(type(str2.decode('utf-8')))

'''
輸出:
I am jiyongjia !
<class 'str'>
這裏就是提取的字符串了; 
'''

因此,有時候咱們須要把讀取到的數據進行解碼才行!

 

關於二進制的讀寫總結

# 總結:

若是是按照二進制打開文件的,要寫入或者讀取必定要編碼 解碼。
# 對於二進制的讀與寫,要進行對應結構的編碼與解碼,編碼和解碼用相同的方式才行。中文也能夠解析出。
# 寫的時候:str_bytes='I am jiyongjia嘉 !'.encode('utf-8')
# 讀的時候:str2=f2.read().decode('utf-8')

'''
若是不進行decode解碼輸出的話會是:b'I am jiyongjia\xe5\x98\x89 !' 它是一個 <class 'bytes'> 非字符串,很差操做、
若是使用了decode 解碼再輸出的話,輸出結果是一個I am jiyongjia嘉 ! 它是一個 <class 'str'>
'''

方法一:使用pickle庫 來進行讀寫

import pickle     #引入數據持久性模板



# 1--使用 pickle 方式寫入進去。
mylist = [1,2,3,4,5,6,"jiajia","我是雷鋒"]
# 把這個list寫入文件4
path = r'E:\[AAA]全棧學習python\day3\file4.txt'
f= open(path,'wb')    #打開
pickle.dump(mylist,f)
f.close()             #關閉


# 讀取出來、
f2= open(path,'rb')    #打開
templist=pickle.load(f2)
print(templist)
f2.close()             #關閉


'''
輸出:
[1, 2, 3, 4, 5, 6, 'jiajia', '我是雷鋒']
'''

 

方法二:使用json庫 來進行讀寫

說明:

json 文件 很是有用,由於咱們每每須要在關閉程序前把程序所處理獲得的數據進行保存,在下一次打開程序的時候再加載這些數據,這就要用到json。並且 json 數據是一種通用格式,經過json 就能夠把數據打包分享給其餘語言的程序員使用了,便於跨平臺操做。

# 說明:
# json 文件 很是有用,由於咱們每每須要在關閉程序前把程序所處理獲得的數據進行保存,
# 在下一次打開程序的時候再加載這些數據,這就要用到json。並且 json 數據是一種通用格式,
# 經過json 就能夠把數據打包分享給其餘語言的程序員使用了,便於跨平臺操做。

import json

# 1 把列表存入到json 文件  即json.dump
list1=[1,12,3,4,5,6,"嘉嘉","jiajai"]
dict1={"1":"puyhon學習",'2':"Java學習"}

path= r'E:\[AAA]全棧學習python\day3\jsonfile1.json'
with open(path,'w') as json_file:
    json.dump(list1, json_file)
   

# 2 把json文件中的內容取出  即json.load
path= r'E:\[AAA]全棧學習python\day3\jsonfile1.json'
with open(path) as f2:
    file=json.load(f2)
    print("welcome back! 提取內容是:",file)

 

 

相關文章
相關標籤/搜索