Python基本語法 打開文件


打開文件的操作

數據是寫在文件里面的,open file 可以實現  讀取數據  寫入數據

一般的文件操作步驟:

  1. 先打開文件
  2. 讀取文件數據
  3. 寫入數據
  4. 關閉文件

注意:文件打開后,最后一定要記得關閉文件,否則會引起很多問題

1.打開文件,使用的方法為open() 內置函數

f=open('文件名稱/文件路徑')

2.讀取文件:

f.read()    就可以讀取文件所有數據(讀取的數據類型為字符串)

讀取的方法有:

mode='r'  讀取模式   (一般默認的模式為:讀取模式) 所以,如果是進行文件讀取,可以默認不傳,但是前提必須是,讀取時,文件必須存在,否則會報錯

mode='rb'  也是讀取模式,不過一般是以二進制格式打開一個文件,用於讀寫。一般用於非文本文件,例如圖片

#打開文件
f = open('python_test.txt')#如果你讀取的是同一個文件夾下,不需要加路徑,不同文件下,需要加上詳細的路徑信息
#讀取數據
data = f.read()#read 讀取出來的數據是字符串
print(data)
print(type(data)) #打開文件讀取出來的數據為字符串類型
#關閉文件 f.close()

輸出結果為:
<class 'str'>

如果想將返回的字符串數據,存放在一個列表里面,方便后續處理,可以使用之前字符串的一個方法,split() 分割

split()  內置函數返回的結果為,字符串列表(分割后的參數為字符串形式,存儲在列表內)----可以自行實踐

new_data = data.split('\n') #將返回的字符串以換行符進行切割存儲
print(new_data)

3.寫入文件

文件不存在(就是在一個新的文件里面,寫入需要寫入的數據)

  • mode='w'     覆蓋模式
    • 在w模式下,如果之前沒有這個文件,將會在傳入的路徑下創建一個新的文件
      #使用默認的mode='r'模式
      file=open('data.txt')    #執行會報錯
      
      #使用mode='w'模式,寫入除中文以外的字符,可以使用
      file=open('data.txt',mode='w')#可以在當前路徑下創建一個新的文件;data.txt
      
      
      #如果要在文件里面寫入中文,需要設置編碼格式     encoding=utf-8,否則會亂碼
      
      file = open('new_file.txt','w',encoding= 'utf-8')#添加編碼格式encoding='utf-8'
      #寫入數據
      file.write('這是一篇很好的文章')
      #關閉文件
      file.close()

       

    • 使用格式說明
    1. 使用open()內置函數打開文件,進行操作的過程中,不需要傳入關鍵字mode,只需要傳入對應的讀取模式就行
    2. 原因是:open函數的源碼部分,傳入的參數位置:def open(file,mode ='r',buffering = None,encoding = None,......)
    3. 其中,mode為第二個位置參數,所以可以不用寫,但是其他的需要傳入,不然會報錯,例如,常用的encoding位置參數

       注意事項:如果之前已經存在相同名稱的文件,使用mode='w'模式,會覆蓋之前的文件內用,所以使用時需要很謹慎

  • 如何解決被覆蓋的問題
    • mode='a'    追加模式
    • 在a模式下,如果之前不存在的文件,會創建新的文件,且在每運行一次后,將新寫入的內容追加到文檔的最后位置
    • mode='b'  二進制模式    不能單獨使用,要跟r,w組合使用,其中,圖片就是的使用二進制打開和存儲的
      file = open('你好.png',mode='rb')
      #讀數據
      print(file.read())#打印出一串16進制的數字
      #關閉文件
      file.close()

       

    • mode='t'  文本模式    上面說的mode='r',實際上就是mode='rt',因為默認都是用txt打開
    • mode='+'  加模式  組合使用      r+ :可讀可寫,其中可寫為追加模式
      file = open('new_file.txt',mode='r+',encoding= 'utf-8')
      file.read()#先讀
      #寫入數據
      file.write('這是一本很有意思的書')#再寫
      #關閉文件
      file.close()

       

4.文件的操作之   seek

seek:表示光標在哪里

  • 打開一個文件時,光標在最開始的位置
  • 打開一個文件,w+的模式寫入一些數據,但是沒有關閉文件。再次讀取時,不會讀取到數據,因為此時的光標在最末尾(所以,一定要注意,打開文件,操作完成后,一定要關閉文件,再進行下一步操作
  • #此操作讀取不到文件數據
    f = open('demo.txt','w+')#'w+'可以同時具備可讀可寫能力
    f.write('new line')
    print(f.read())
    #打開文件,操作完成后,關閉文件,再打開操作,就可以讀取到最新數據
    f = open('demo.txt','w+')
    f.write('new line')
    f.close()
    f = open('demo.txt','r')
    print(f.read())
    #結果:new line

 

5.readlines  讀取每一行,會存放在列表當中,每一行的數據就是列表的一個元素

   read    讀取的數據是一整個字符串

#使用read()  讀取全部數據
file=open('data.txt',encoding='utf-8')
data=file.read()
print(data)
print(type(data))

輸出結果:
這是第一行內容
這是第二行內容
這是第三行內容
<class 'str'>


#使用readlines()  讀取數據
data1=file.readlines()
print(data1)
print(type(data1))

輸出結果:
['這是第一行內容\n', '這是第二行內容\n', '這是第三行內容']
<class 'list'>

readlines()  方法取出的數據為字符串,且存儲在列表當中,且字符串末尾存在一個換行符,如果想要將返回的數據取出換行符,可以使用for循環進行遍歷,取出每個字符串,然后使用字符串的strip() 方法,去除字符串首尾空格或者是換行符

方法二:使用enumerate() 方法  (可以多多了解,工作當中很實用)

file=open('data.txt',encoding='utf-8')

data1=file.readlines()
print(data1)
print(type(data1))
for line,data in enumerate(data1):
    if line == len(data1)-1:
        print(data)    #根據數據對應的下標位置,獲取對應數據
    else:
        print(data[:-1])

輸出結果:
這是第一行內容
這是第二行內容
這是第三行內容

6.with語句:可以讓我們節省關閉文件的操作

首先,工作當中,我們經常遇到一些任務,可能事先需要設置,事后再做清理的工作。對於這種場景,Python的with語句提供了一個非常方便的處理方式。一個很好的例子就是文件處理,你需要獲取一個文件句柄,從文件中讀取數據,然后關閉文件句柄(此方法就是防止,書寫過程中,忘記關閉文件,而導致報錯)

with語句的語法:

with open(file)  as  filename:

使用方法:

with  open('data.txt')  as f:

   data= f.read()

   data1=f.readlines()

 


免責聲明!

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



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