1. [文件]- 文件類型,文件open模式


1.文件類型:文本文件和二進制文件

  硬盤中的文件保存為01010101格式,一般讀取文件是把文件從硬盤中讀取到內存中。

  • 文本文件需要進行格式轉換才能讀取出來。
  • 二進制文件一般用於傳輸

  

  二進制文件:視頻圖片

  

 

2.文件打開模式

   

幾種不同的讀取和遍歷文件的方法比較:

如果文件很小,read()一次性讀取最方便;
如果不能確定文件大小,反復調用read(size)比較保險;
如果是配置文件,調用readlines()最方便。
普通情況,使用for循環更好,速度更快。

  

 

3.r rb讀模式 

(1)r 讀模式

f = open(file='D:/工作日常/兼職白領學生空姐模特護士聯系方式.txt',mode='r',encoding='utf-8')
data = f.read()
f.close()

 

file='D:/工作日常/兼職白領學生空姐模特護士聯系方式.txt'  表示文件路徑
mode='r'                                          表示只讀(可以修改為其他)
encoding='utf-8'                                  表示將硬盤上的 0101010 按照utf-8的規則去“斷句”,再將“斷句”后的每一段0101010轉換成unicode的 01010101,unicode對照表中有01010101和字符的對應關系。
f.read()                                          表示讀取所有內容,內容是已經轉換完畢的字符串。
f.close()                                         表示關閉文件

 

  PS: 此處的encoding必須和文件在保存時設置的編碼一致,不然“斷句”會不准確從而造成亂碼。

 

 (2)rb 二進制讀模式

  二進制模式,通常用來讀取圖片、視頻等二進制文件。

  注意,它在讀寫的時候是以bytes類型讀寫的,因此獲得的是一個bytes對象而不是字符串。在這個讀寫過程中,需要自己指定編碼格式。在使用帶b的模式時一定要注意傳入的數據類型,確保為bytes類型。

  

 

  (3)智能檢測編碼工具:chardet

# 安裝包
C:\Users\liangshuo>pip install chardet


# 代碼
import chardet
f = open('file_2_gbk.txt',mode='rb' )
data = f.read()
result = chardet.detect(data)
print(result)

# 
{'confidence': 1.0, 'encoding': 'ascii', 'language': ''}

 

  

  (4)編碼問題

注意:

文件操作時,以 “r”或“rb” 模式打開,則只能讀,無法寫入;
硬盤上保存的文件都是某種編碼的0101010,打開時需要注意:
rb,直接讀取文件保存時原生的0101010,在Python中用字節類型表示
r和encoding,讀取硬盤的0101010,並按照encoding指定的編碼格式進行斷句,再將“斷句”后的每一段0101010轉換成unicode的 010101010101,在Python中用字符串類型表示

 

 

4.w wb寫模式

 (1)w模式

f = open(file='D:/工作日常/兼職白領學生空姐模特護士聯系方式.txt',mode='w',encoding='utf-8')
f.write('北大本科美國留學一次50,微信號:xxxxx')
f.close()

 

file='D:/工作日常/兼職白領學生空姐模特護士聯系方式.txt'     表示文件路徑
mode='w'                                             表示只寫
encoding='utf-8'                                     將要寫入的unicode字符串編碼成utf-8格式
f.write(...)                                         表示寫入內容,寫入的內容是unicode字符串類型,內部會根據encoding轉換為制定編碼的 01101010101,即:字節類型

 

  (2)wb模式

f = open(file='D:/工作日常/兼職白領學生空姐模特護士聯系方式.txt',mode='wb')
f.write('北大本科美國留學一次50,微信號:xxxxx'.encode('utf-8'))
f.close()
file='D:/工作日常/兼職白領學生空姐模特護士聯系方式.txt'      表示文件路徑
mode='wb'                                             表示只以2進制模式寫
f.write(...)                                          表示寫入內容,寫入的內容必須字節類型,即:是某種編碼格式的0101010

 

  

  (3)編碼問題

注意:

文件操作時,以 “w”或“wb” 模式打開,則只能寫,並且在打開的同時會先將內容清空。

寫入到硬盤上時,必須是某種編碼的0101010,打開時需要注意:

wb,寫入時需要直接傳入以某種編碼的0100101,即:字節類型
w 和 encoding,寫入時需要傳入unicode字符串,內部會根據encoding制定的編碼將unicode字符串轉換為該編碼的 010101010

 

 

5.a ab追加模式

f = open("兼職白領學生空姐模特護士聯系方式.txt",'a',encoding="gbk")

f.write("\n杜姍姍 北京  167 49 13324523342")
f.close()


#
姓名        地區    身高    體重    電話
況詠蜜     北京    171    48    13651054608
......
岳妮妮     深圳    177    54    18835324553
賀婉萱     深圳    174    52    18933434452
葉梓萱    上海    171    49    18042432324
杜姍姍 北京  167 49 13324523342            #這行是添加的
文件操作時,以 “a”或“ab” 模式打開,則只能追加,即:在原來內容的尾部追加內容

寫入到硬盤上時,必須是某種編碼的0101010,打開時需要注意:

ab,寫入時需要直接傳入以某種編碼的0100101,即:字節類型
a 和 encoding,寫入時需要傳入unicode字符串,內部會根據encoding制定的編碼將unicode字符串轉換為該編碼的 010101010

 

 

6.混合模式r+ w+

  (1)r+ 讀寫模式

f = open('file_2_gbk.txt',mode='r+' )
data = f.read()            # 讀內容
print(data)
f.write('\nthis is last')   #寫內容
f.close()

  

  (2)w+寫讀模式(沒用)

w+會先把文件清空,再寫新內容,
相比w模式,只是支持了一個讀功能,且還只能讀已經寫入的新內容。着實沒什么卵用。。。

 

  

7. with關鍵字

with關鍵字用於Python的上下文管理器機制。為了防止諸如open這一類文件打開方法在操作過程出現異常或錯誤,或者最后忘了執行close方法,文件非正常關閉等可能導致文件泄露、破壞的問題。Python提供了with這個上下文管理器機制,保證文件會被正常關閉。在它的管理下,不需要再寫close語句。注意縮進。

with open('test.txt', 'w') as f:
    f.write('Hello, world!')

 

with支持同時打開多個文件:

with open('log1') as obj1, open('log2','w') as obj2:
    s=obj1.read()
    obj2.write(s)

 

8.遍歷文件

實際上,更多的時候,我們將文件對象作為一個迭代器來使用。

f = open('file_2_gbk.txt',mode='r' )
for line in f: print(line,end='') f.close() # 111111111 22222222 33333333 4444444

 這個方法很簡單, 不需要將文件一次性讀出,但是同樣沒有提供一個很好的控制,與readline方法一樣只能前進,不能回退。

 
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM