Python中的文件

目標:

  • 文件的概念
  • 文件的基本操作
  • 文件/文件夾的常用操作
  • 文本文件的編碼方式

1.文件的概念

1.1文件的概念和作用

  • 計算機的文件,就是存儲在某種長期存儲設備上的一段數據
  • 長期存儲設備包括:硬盤、U盤、移動硬盤、光盤····

  文件的作用:

  將數據長期存儲下來,在需要的時候使用

  

1.2文件的存儲方式

  • 在計算機中,文件是以 二進制 的方式保存在磁盤上的

  文本文件和二進制文件

  • 文本文件
    • 可以用 文本編輯軟件查看
    • 本質上還是二進制
    • 例如:Python源文件
  • 二進制文件
    • 保存的內容不是給人直接閱讀的,而是提供給其他軟件使用的 
    • 例如:圖片文件、音頻文件、視頻文件等等
    • 二進制文件不能直接使用文本編輯器查看

2.文件的基本操作

2.1操作文件的套路

  在計算機中,要操作文件的套路非常固定,一共包含三個步驟:

  1. 打開文件
  2. 讀、寫文件
    • 讀:將文件內容讀入內存
    • 寫:將內存內容寫入文件
  3. 關閉文件

2.2操作文件的函數/方法

  • 在Python中操作文件需要記住1個函數和3個方法
序號 函數/方法 說明
1 open 打開文件,並返回文件操作對象
2 read 將文件內容讀取到內存
3 write 將指定內容寫入到文件
4 close 關閉文件
  • open() 函數負責打開文件,並返回文件對象
  • read/write/close三個方法都需要通過文件對象來調用

 

2.3read方法——讀取文件

  • open函數的第一個參數,是被打開的文件名(文件名區分大小寫)
    • 如果文件存在,返回文件操作對象
    • 如果文件不存在,會拋出異常
  • read方法 可以一次性讀入並返回 文件的所有內容
  • close方法 負責關閉文件
    • 如果忘記關閉文件,會造成系統資源消耗,而且會影響到後續對文件的訪問
  • 注意:方法執行後,會把文件指針移動到文件的末尾
  • 提示:
    • 在開發中,通常先編寫打開和關閉的代碼,在編寫中間針對文件讀/寫操作!
  • #獲得文件操作對象(sis.txt文件)
    file = open("sis.txt")
    #讀取
    text = file.read()
    print(text)
    #關閉文件
    file.close()
    '''
    運行結果
    我是中文的哦
    nidie中文
    '''

 

  • 文件指針
    • 文件指針 標記 從那個位置開始讀取數據
    • 第一次打開文件時,通常文件指針會指向文件開始的位置
    • 當執行了read方法後,文件指針會移動到讀取內容的末尾
      • 默認情況下會移動到文件末尾
    • 思考:如果執行了一次read方法,讀取了所有內容,那麼再次調用read方法還能獲取到內容嗎?
      • 答案:不能。第一次讀取內容後,文件指針移動到文件末尾,再次調用不會讀取到任何內容
      •  1 #獲得文件操作對象(sis.txt文件)
         2 file = open("sis.txt")
         3 #讀取
         4 text = file.read()
         5 #查看讀取文件的長度  (14)
         6 print(len(text))
         7 #輸出讀取到的文件
         8 print(text)
         9 print("*"*30)
        10 #重新讀取文件
        11 text = file.read()
        12 print(text)         #
        13 print(len(text))    # (0)
        14 #關閉文件
        15 file.close()
        16 
        17 """
        18 運行結果:
        19 14
        20 我是中文的哦
        21 nidie中文
        22 ******************************
        23 
        24 0
        25 """
        文件指針演示

         

2.4打開文件的方式

  • open函數默認以只讀方式打開,並返回文件對象

  語法如下:

    • f = open( " 文件名 "  , " 訪問方式 " )
  •  

     提示:頻繁的移動指針,會影響文件讀寫效率,開發中更多的時候會以 只讀、只寫 的方式來操作文件

 

2.5按行讀取文件內容

  • read方法默認會把文件的 所有內容 一次性讀到內存
  • 如果文件太大,對內存的佔用會非常嚴重

  readline 方法:

    • 可以一次讀取一行內容
    • 方法執行後,會把指針移動到下一行,準備再次讀取

  讀取大文件的正確姿勢:

    •  1 #打開文件
       2 file = open("sis.txt")
       3 while True:
       4     #讀取一行內容
       5     text = file.readline()
       6     #判斷是否讀取到內容
       7     if text == "":          #或者 if not text:
       8         print(type(text))   #<class 'str'>
       9         break
      10     #每讀取到末尾都會有一個 \n
      11     print(text,end="")
      12 """
      13 運行結果:
      14 python1一
      15 python2二
      16 python3三
      17 python4四<class 'str'>
      18 """
      View Code

2.6文件讀寫案例——複製文件

目標:用代碼實現文件的複製過程

  • 小文件複製
    • 打開一個已有文件,讀取完整內容,並寫入到另一個文件
    •  1 #複製小文件方式1
       2 file_read = open("sis.txt","r")
       3 file_write = open("test.txt","w")
       4 text_1 = file_read.read()
       5 text_2 = file_write.write(text_1)
       6 file_write.close()
       7 file_read.close()
       8 
       9 #複製小文件方式2 推薦(with關鍵字,會自動釋放文件對象空間)
      10 test = None
      11 with open("sis.txt","r") as file:
      12     test = file.read()
      13 with open("test1.txt","w") as file:
      14     file.write(test)
      小文件複製
  • 大文件複製
    • 打開一個已有文件,逐行讀取內容,並順序寫入到另一個文件
    •  1 #大文件複製
       2 file_read = open("五筆詞根1.jpg","rb")
       3 file_write = open("五筆詞根2.jpg","wb")
       4 while True:
       5     text = file_read.readline()
       6     #python中,除了‘’、""、0、()、[]、{}、None爲False, 其他轉換都爲True。 也就是說字符串如果不爲空,則永遠轉換爲True。
       7     if not text:
       8         break
       9     file_write.write(text)
      10 file_read.close()
      11 file_write.close()
      大文件複製

 

2.7文件讀寫中的函數

文件讀取 — Python 3.10.1 文檔

3.文件/目錄的常用管理操作

  • 在   終端/文件瀏覽  中可以執行常規的  文件/目錄  管理操作,例如
    • 創建、重命名、刪除、改變路勁、查看目錄內容........
  • 在Python中如果希望通過程序實現上述功能,需要導入  os  模塊

  文件操作:

    

 

   目錄操作:

    

 

  • 提示:文件或者目錄操作,都支持  相對路徑絕對路勁

 

4.文本文件的編碼方式

pass

# -*- coding: utf8 -*-
# -*- coding: utf-8 -*-
# -*- coding: gbk -*-

 

5.拓展:eval函數

eval函數功能非常強大——將字符串當成有效的表達式來求值,並返回計算結果

# -*- coding: gbk -*-
#基本的數學計算
print(eval("1+1"))
#字符串重複
print(eval("'*'*30"))
#將字符串轉變成列表
print(type(eval("[1,2,3,4,5]")))
#將字符串轉變成元組
print(type(eval("(1,2,3,4,5)")))
#將字符串轉變成字典
print(type(eval("{'name':'蘋果','age':18}")))

 

案例——計算器

input_str = input("輸入算數題")
print(eval(input_str))
'''
運行:
輸入算數題1+1
2
'''

注意:在開發的時候千萬不要使用 eval 直接轉換 input 的結果

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章