日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python文件操作的一般步骤_Python基础之文件操作

發布時間:2024/9/19 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python文件操作的一般步骤_Python基础之文件操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? 應用程序運行過程中產生的數據最先都是存放于內存中的,若想永久保存下來,必須要保存于硬盤中。應用程序若想操作硬件必須通過操作系統,而文件就是操作系統提供給應用程序來操作硬盤的虛擬概念,用戶或應用程序對文件的操作,就是向操作系統發起調用,然后由操作系統完成對硬盤的具體操作。

文件操作的基本流程

#1. 打開文件,由應用程序向操作系統發起系統調用open(...),操作系統打開該文件,對應一塊硬盤空間,并返回一個文件對象賦值給一個變量f

f=open('a.txt','r',encoding='utf-8') #默認打開模式就為r

#2. 調用文件對象下的讀/寫方法,會被操作系統轉換為讀/寫硬盤的操作

data=f.read()#3. 向操作系統發起關閉文件的請求,回收系統資源

f.close()

打開一個文件包含兩部分資源:應用程序的變量f和操作系統打開的文件。在操作完畢一個文件時,必須把與該文件的這兩部分資源全部回收,回收方法為:

1、f.close() #回收操作系統打開的文件資源

2、del f #回收應用程序級的變量

其中del f一定要發生在f.close()之后,否則就會導致操作系統打開的文件無法關閉,白白占用資源, 而python自動的垃圾回收機制決定了我們無需考慮del f,這就要求我們,在操作完畢文件后,一定要記住f.close(),雖然我們如此強調,但是大多數讀者還是會不由自主地忘記f.close(),考慮到這一點,python提供了with關鍵字來幫我們管理上下文

#1、在執行完子代碼塊后,with 會自動執行f.close()

with open('a.txt','w') as f:pass

#2、可用用with同時打開多個文件,用逗號分隔開即可

with open('a.txt','r') as read_f,open('b.txt','w') as write_f:

data=read_f.read()

write_f.write(data)

文件操作模式

只讀模式

r模式

只能進行讀不能進行別的操作

f = open('a.txt',mode='r',encoding='utf-8')

content=f.read()print(content)

f.close()#open中第一個參數放入的是要打開的文件名字,第二個參數是要對這個文件進行的操作,第三參數是用什么編碼方式打開文件中的內容

f 可寫成任意變量等,它被稱作:文件句柄,文件操作符,或者文件操作對象等。

open 是Python調用的操作系統(windows,linux,等)的功能,而windows的默認編碼方式為gbk,linux默認編碼方式為utf-8,所以你的文件用什么編碼保存的,就用什么方法打開,一般都是用utf-8。

mode為打開方式:常見的有r,w,a,r+,w+,a+.rb,wb,ab,等,默認不寫是r。

流程就是打開文件,產生一個文件句柄,對文件句柄進行相應操作,關閉文件。

rb模式

rb只讀字節的模式

f = open('b.jpg',mode='rb')

content=f.read()print(content)

f.close()

rb 讀出來的數據是bytes類型,在rb模式下,不能encoding字符集

rb的作用:在讀取非文本文件的時候,比如要讀取mp3,圖像,視頻等信息的時候就需要用到rb,因為這種數據是沒辦法直接顯示出來的

這個字節的模式是用于傳輸和存儲

寫模式

覆蓋寫模式:

在寫文件的時候我們要養成一個寫完文件就刷新的習慣. 刷新flush()

f = open('aaa.txt',mode='w',encoding='utf-8')

f.write('aaa')

f.flush()

f.close()

當我選擇使用w模式的時候,在打開文件的時候就就會把文件中的所有內容都清空,然后在操作

注意:如果文件不存在使用w模式會創建文件,文件存在w模式是覆蓋寫,在打開文件時會把文件中所有的內容清空.

wb模式下,不可以指定打開文件的編輯,但是寫文件的時候必須將字符串轉換成utf-8的bytes數據

f = open('aaa.txt',mode='wb')

msg= '你好'.encode('utf-8')

f.write(msg)

f.flush()#刷新

f.close()

追加

只要是a或者ab,a+都是在文件的末尾寫入,不論光標在任何位置.

在追加模式下,我們寫入的內容后追加在文件的末尾

a模式如果文件不存在就會創建一個新文件

f1 = open('aaa.txt',mode='a',encoding='utf-8')

msg= f1.write('bbb')

讀寫模式

對于讀寫模式,必須是先讀后寫,因為光標默認在開頭位置,當讀完了以后再進行寫入.

r+模式

#正常的讀取內容, 寫在文件末尾

f1 = open('aaa.txt',mode='r+',encoding='utf-8')

msg=f1.read()

f1.write('哈哈哈')

f1.flush()

f1.close()print(msg)#錯誤的讀取內容, 寫在文件開頭, 并且只讀取之后的內容

f1 = open('aaa.txt',mode='r+',encoding='utf-8')

f1.write('bbb')

msg=f1.read()

f1.flush()

f1.close()print(msg)

寫讀模式

先將所有的內容清空,然后寫入.最后讀取.但是讀取的內容是空的,不常用

f1 = open('bbb.txt',mode='w+',encoding='utf-8')

f1.write('bbb')

msg=f1.read()

f1.flush()

f1.close()print(msg)

追加讀(a+,a+b)

a+模式下,不論是先讀還是后讀,都是讀不到數據的

f = open('ccc.txt',mode='a+',encoding='utf-8')

f.write('ccc')

f.flush()

msg=f.read()

f.close()print(msg)

文件的相關操作

read()

read()是將文件中所有的內容都讀取

f = open('aaa.txt',mode='r',encoding='utf-8')

msg=f.read()

f.close()print(msg)

read()可以指定我們想要讀取的內容數量

f = open('aaa.txt',mode='r',encoding='utf-8')

msg= f.read(3) #讀取三個字符

msg1 = f.read() #后邊在讀就會繼續向后讀取

f.close()print(msg)print(msg1)

如果使用rb模式讀取出來的就是字節

f = open('bbb.txt',mode='rb')

msg= f.read(3)

msg1=f.read()

f.close()print(msg)print(msg1)

read()的弊端就是當文件很大的時候,將文件中的內容全部讀取,存放在內存中這樣會導致內存奔潰

readline()

readline()讀取每次只讀取一行,注意點:readline()讀取出來的數據在后面都有一個\n

f = open('aaa.txt',mode='r',encoding='utf-8')

msg1=f.readline()

msg2=f.readline()

msg3=f.readline()

msg4=f.readline()

f.close()print(msg1)print(msg2)print(msg3)print(msg4

readlines()

readlines() 將每一行形成一個元素,放到一個列表中,將所有的內容全部讀出來,如果文件很大,占內存,容易崩盤。

f = open('log',encoding='utf-8')print(f.readlines())

f.close()

如果有個較大的文件我們進行讀取不推薦使用以下方法:

f = open('aaa',mode='r',encoding='utf-8')print(f.read()) #這樣就是將文件一次性全部讀取到內存中,內存容易奔潰

推薦使用的是這種方法:

f = open('aaa',mode='r',encoding='utf-8')for line inf:print(line) #這種方式就是在一行一行的進行讀取,它就執行了下邊的功能

print(f.readline())print(f.readline())print(f.readline())print(f.readline())

f.close()

注意:讀完的文件句柄一定要關閉

seek()

seek(n)光標移動到n位置,注意: 移動單位是byte,所有如果是utf-8的中文部分要是3的倍數

通常我們使用seek都是移動到開頭或者結尾

移動到開頭:seek(0,0) 可以看做成seek(0)

seek(6)這種如果是單數并且不是0的就是按照字節來移動光標

移動到結尾:seek(0,2) seek的第二個參數表示的是從哪個位置進行偏移,默認是0,表示開頭,1表示當前位置,2表示結尾

f = open("aaa", mode="r+", encoding="utf-8")

f.seek(0)#光標移動到開頭

content = f.read() #讀取內容, 此時光標移動到結尾

print(content)

f.seek(0)#再次將光標移動到開頭

f.seek(0, 2) #將光標移動到結尾

content2 = f.read() #讀取內容. 什么都沒有

print(content2)

f.seek(0)#移動到開頭

f.write("張國榮") #寫入信息. 此時光標在9 中文3 * 3個 = 9

f.flush()

f.close()

tell()

tell()

使用tell()可以幫我們獲取當前光標在什么位置

f = open("aaa", mode="r+", encoding="utf-8")

f.seek(0)#光標移動到開頭

content = f.read() #讀取內容, 此時光標移動到結尾

print(content)

f.seek(0)#再次將光標移動到開頭

f.seek(0, 2) #將光標移動到結尾

content2 = f.read() #讀取內容. 什么都沒有

print(content2)

f.seek(0)#移動到開頭

f.write("張國榮") #寫入信息. 此時光標在9 中?文3 * 3個 = 9

print(f.tell()) #光標位置9

f.flush()

f.close()

修改文件

文件修改: 只能將文件中的內容讀取到內存中, 將信息修改完畢, 然后將源文件刪除, 將新文件的名字改成老文件的名字.

importos

with open("aaa", mode="r", encoding="utf-8") as f1,\

open("aaa_new", mode="w", encoding="UTF-8") as f2:

content=f1.read()

new_content= content.replace("冰糖葫蘆", "?白梨")

f2.write(new_content)

os.remove("aaa") #刪除源文件

os.rename("aaa_new", "aaa") #重命名新文件

弊端: ?次將所有內容進行讀取. 內存溢出. 解決方案: 一行一行的讀取和操作

importos

with open("aaa", mode="r", encoding="utf-8") as f1,\

open("aaa_new", mode="w", encoding="UTF-8") as f2:for line inf1:

new_line= line.replace("大白梨", "冰糖葫蘆")

f2.write(new_line)

os.remove("aaa") #刪除源?文件

os.rename("aaa_new", "aaa") #重命名新文件

總結

以上是生活随笔為你收集整理的python文件操作的一般步骤_Python基础之文件操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。