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

歡迎訪問 生活随笔!

生活随笔

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

python

python文件IO操作

發布時間:2025/7/14 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python文件IO操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.python文件操作的步驟

1.先open打開一個文件

  f = open("文件路徑",“文件訪問模式”)

2.對文件的操作

3.close關閉打開的文件

  f.close()

也可以使用一行命令打開文件,不用close()關閉:with open("文件路徑",“文件訪問模式”) as f:

二.文件的訪問模式

訪問模式說明
r (read)只讀模式,不能寫(文件必須存在,不存在會報錯)
w (write)只寫模式,不能讀(文件存在則會被覆蓋內容(要千萬注意),文件不存在則創建)
a (append)追加模式,不能讀
r+讀寫模式
w+寫讀模式
a+追加讀模式
rb二進制讀模式
wb二進制寫模式
ab二進制追加模式
rb+二進制讀寫模式
wb+二進制寫讀模式
ab+二進制追加讀模式

三.只讀模式r

只讀模式讀取數據

f = open('/tmp/1.txt", encoding="utf-8") # 默認就是只讀模式 # 如果不同平臺,可能會字符集編碼不一致,不一致的需要指定;一致的不用指定。 data1 = f.read() data2 = f.read() # 讀第二遍 f.close()print(data1) print("="*50) print(data2) # 發現讀第二遍沒有結果;類似從上往下讀了一遍,第二次讀從最后開始了,所以就沒結果了

tell()與seek()的使用

tell()  獲取當前的讀取數據的位置(可以理解為一個讀光標當前的位置)

seek(n)  從第n個字符開始讀取(將讀光標移動到第n個字符)

f = open("/tmp/1.txt", "r") print(f.tell()) # 結果為0 (告訴你光標在哪,剛打開文件,光標在0位置) f.seek(5) # 移你的光標到整個文件的第6個字符那(因為0為第一個) print(f.tell()) # 結果為5 f.seek(2) # 移你的光標到整個文件的第3個字符那,從0開始算,而不是從上面的位置開始算 print(f.tell()) # 結果為2 f.close() f = open("/tmp/1.txt", mode="r")data1 = f.read() # 讀了第一次后,光標在最后的位置 f.seek(0) # 通過seek(0)將光標又重置回開始的位置 data2 = f.read() # 再次讀的話,就可以又重頭讀一遍了,data2變量的內容與data1的內容就一致了 f.close()print(data1) print("="*20) print(data2)

read(),readline()和readlins()三種讀數據的方法

f = open("/tmp/1.txt", "r")f.seek(5) # 光標移到第6個字符那里 data1 = f.read() # read是讀整個文件在光標后面的所有字符(包括光標所在的那個字符),讀完后,會把光標移到你讀完的位置 f.seek(5) # 光標重置到第6個字符那里 data2 = f.readline() # readline是讀光標所在這一行的在光標后面的所有字符(包括光標所在的那個字符),讀完后,會把光標移到你讀完的位置 f.seek(5) # 光標重置到第6個字符那里 data3 = f.readlines() # readlines和read類似,但把讀的字符按行來區分做成了列表 f.close() print(data1) print("="*30) print(data2) print("="*30) print(data3)

循環讀取文件

f = open("/tmp/1.txt", "r")#循環方法一: for index, line in enumerate(f.readlines()):print(index, line.strip()) # 需要strip處理,否則會有換行# 循環方法二:這樣效率較高,相當于是一行一行的讀,而不是一次性全讀(如果文件很大,那么一次性全讀會速度很慢) for index, line in enumerate(f):print(index, line.strip())f.close()

四.只寫模式w

只讀模式下,只能向文件寫內容,不能讀取

如果文件不存在,會自動創建

如果文件已存在,則會先清空文件,再向文件寫入數據

f = open("/tmp/2.txt", 'w') # 文件不存在,會幫你創建(類似shell里的 > 符號)#data = f.read() # 只寫模式,讀會報錯 f.write("hello\n") # 不加\n,默認不換行寫 f.write("world\n") f.truncate() # 截斷,括號里沒有數字,那么就是不刪除 f.truncate(3) # 截斷,數字為3,就是保留前3個字節 f.truncate(0) # 截斷,數字為0,就是全刪除 f.close()

將九九乘法表寫入文件

f = open("/tmp/3.txt", "w")for i in range(1, 10):for j in range(1, i+1):f.write("{}*{}={} ".format(i, j, i*j))f.write("\n")f.close()

五.追加模式a

追加模式下,文件不存在會自動創建,文件存在則會在文件末尾追加數據,不會覆蓋原有數據

f = open("/tmp/2.txt", 'a') # 類似shell里的>>符 f.write("hello\n") f.write("world\n") f.truncate(0) # 追加模式也可以使用truncate截取前面的數據 f.close()

六.list,tuple,dict.set的文件操作

對于list,tuple,dict,set的數據需要使用二進制的方式讀寫,否則寫入或讀出的數據可能會亂碼

import pickle # 數據持久性模塊#列表可以換成元組,字典,集合等數據類型,效果相同 list1 = [1, 2, 3, 4, "xianqian"]f = open("3.txt", mode="wb")# write的參數為str類型,不能直接寫list,tuple,dict,set等數據類型,需要導入模塊pickle,使用二進制模式wb寫入, pickle.dump(list1, f) # 將list1元素寫入文件描述符f f.close()f1 = open("3.txt", mode="rb")data = pickle.load(f1) # 將f1中的數據讀出來 print(data)f.close()

七.編碼與解碼

編碼時使用什么字符集,解碼時要用相同的字符集解碼

# 要注意文件本身自帶的編解碼和寫入讀出的手動編解碼是兩回事 with open("1.txt",mode="wb") as f1:str1 = "xianqian嘿嘿"f1.write(str1.encode("utf-8"))with open("1.txt", mode="rb") as f2:data = f2.read()# data = f2.read().decode("utf-8") print(data)

?

八.擴展了解r+模式

# r+ mode f = open("httpd.conf", mode="r+")# # f.read() # f.readline() # f.seek(f.tell()) # # f.seek(f.tell()) # f.write("hello world\n")for i in range(41):f.readline()f.seek(f.tell()) f.write("Listen 8080\n")f.close()# r+模式下,如果直接寫,會從0位置處開始寫,并且覆蓋原位置的字符,寫多少字符就覆蓋多少字符,如果寫入換行符,會覆蓋原有的兩個字符# r+模式下,使用了read()或readline()或readlines()后再寫字符,會在文件最后寫入,readline()讀取后,會換行寫; # read()或readlines()讀取后會在同一行寫

?

轉載于:https://www.cnblogs.com/golinux/p/10809979.html

總結

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

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