Python 入門之 文件 1、文件操作 找到文件位置 雙擊打開 進行一些操作 r—read(讀) w—write(寫) a—追加 rd 讀位元組 wd 清空寫,寫位元組 ad 追加寫(位元組) r+ 讀寫 w+ 寫讀 a+ 追加讀 關閉文件 open() : 打開 ,open通過python控制操作系統 ...
Python 入門之 文件
1、文件操作
找到文件位置
雙擊打開
進行一些操作
r—read(讀) w—write(寫) a—追加
rd--讀位元組 wd--清空寫,寫位元組 ad --追加寫(位元組)
r+ -- 讀寫 w+ --寫讀 a+ -- 追加讀
關閉文件
open() : 打開 ,open通過python控制操作系統進行打開文件
open("t1","r",encoding="utf-8") //Open(“文件的路徑”,”進行的操作”,”文件的編碼形式”)
file 文件的位置
mode 預設不寫就是r
encoding 文件的編碼
f 文件句柄
文件只能讀取一次
(1)讀操作
<1> r -- 讀
f = open("D:\Python_s25\day08\小姐姐電話號",mode="r",encoding="utf-8")print(f.read()) # 全部讀取
print(f.read(3)) # 按照字元讀取
print(f.readline()) # 預設尾部有一個\n
print(f.readline().strip()) # 讀取一行
print(f.readline().strip()) # 將\n去除
print(f.readlines()) #一行一行讀取,全部存儲在列表中
路徑:
絕對路徑:從磁碟(c盤)開始查找
相對路徑:相對於某個路徑文件進行查找
路徑的轉義:
1."D:\\Python_s25\\day08\\t1"
2.r"D:\Python_s25\day08\t1" -- 推薦使用
<2> rb -- 讀位元組:
f = open("timg.jpg",mode="rb")
print(f.read()) # 全部讀取
print(f.read(3)) # 按照位元組讀取
print(f.readline()) # 按照行進行讀取
print(f.readlines())
r和 rb的區別:
1.r需要指定encoding,rb不需要 (位元組操作,不能指定encoding)
2.r模式中的read(3) 按照字元讀取, rb模式中的read(3) 按照位元組讀取
read 和 readlines 如果文件較大時,會出現記憶體溢出
解決方案:當文件較大時,使用for迴圈進行讀取(只是展示了一下)
面試題:
f = open('t1',mode="r",encoding="utf-8")
for i in f:
print(i.strip())
(2)寫操作:
<1> w -- 清空寫(寫的是文本)
先清空文件(在打開文件時進行清空)
寫入內容
當模式為w 和 a 時,有文件就是用當前文件,沒有文件就創建一個文件
ff = open("a1",mode="w",encoding="utf-8")
ff.write("123") # 寫的內容必須是字元串
ff = open("a1",mode="w",encoding="utf-8")
ff.write("我是一個字元串串") # 寫的內容必須是字元串
ff = open("a1",mode="w",encoding="utf-8")
ff.write("[1,2,3,4]\n") # 寫的內容必須是字元串
ff.write('1111\n') # 寫的內容必須是字元串
ff.write('2222\n') # 寫的內容必須是字元串
ff = open("a1",mode="w",encoding="utf-8")
ff.write("[1,2,3,4]\n") # 寫的內容必須是字元串
ff.write('1111\n') # 寫的內容必須是字元串
ff.write('2222\n') # 寫的內容必須是字元串
<2> wb -- 清空寫(寫位元組)
f = open('timg.jpg',mode="rb")
f1 = open("g1.jpg",mode="wb")
content = f.read()
f1.write(content)
(3)追加操作:
<1> a -- 追加寫(文本)
f = open("b1",mode="a",encoding="utf-8")
f.write("你好啊\n")
f.write("我好啊\n")
f.write("他好啊\n")
f.write("大家好啊\n")
<2> ab -- 追加寫(位元組)
(4)+操作:
<1> r+ 讀寫(有點用)
坑 -- 使用方式是錯誤
f = open("b1",mode="r+",encoding="utf-8")
f.write("今天是周一") # write是清空寫
print(f.read())
正確的操作:
f = open("b1",mode="r+",encoding="utf8")
print(f.read())
f.write("今天是周一")
<2> w+ 寫讀(有點用)
f = open("b1",mode="w+",encoding="utf-8")
f.write("今天是周一")
f.seek(0) # 移動游標
print(f.read())
f = open("b1",mode="w+",encoding="utf-8")
f.write("今天是周一")
f.seek(0) # 移動游標
f.write("啊啊啊啊啊啊")
f.seek(0)
print(f.read())
<3> a+ 追加讀
f = open("b1",mode="a+",encoding="utf-8")
f.write("今天是周一")
f.seek(0) # 移動游標
f.write("啊啊啊啊")
print(f.read())
(5)其他操作:
<1> 移動游標 : seek()
seek() 移動游標
f.seek(0,0) # 移動游標到文件的頭部
f.seek(0,1) # 移動游標到當前位置
f.seek(0,2) # 移動游標到文件末尾
f.seek(6) # 移動6個位元組。游標是按照位元組移動
f = open("a1","r",encoding="utf-8")
print(f.read(5))
f.seek(0,0) # 移動游標到文件的頭部
f.seek(0,1) # 移動游標到當前位置
f.seek(0,2) # 移動游標到文件末尾
print(f.read())
f = open("c1","r",encoding="gbk")
f.seek(6) # 游標是按照位元組移動
print(f.read(3))
<2> 查看游標: tell -- 查游標
tell 查游標
f = open("c1","r",encoding="gbk")
print(f.read(3))
print(f.tell()) # 按照位元組進行計算
<2> 修改文件: import os #操作系統交互的介面
f = open('a2',"r",encoding="utf-8")
f1 = open("a1","w",encoding="utf-8")
for i in f:
i = i.replace("日","天")
f1.write(i)
f.close()
f1.close()
os.remove("a2") # 刪除不能找回
os.rename("a1","a2")
f = open('a2',"r",encoding="utf-8")
f1 = open("a1","w",encoding="utf-8")
for i in f:
i = i.replace("天","日")
f1.write(i)
f.close()
f1.close()
os.rename("a2","a3")
os.rename("a1","a2")
<3>With open
自動關閉文件
同一時間操作多個文件
考點:
import os # 操作系統交互的介面
f = open('a2',"r",encoding="utf-8")
f1 = open("a1","w",encoding="utf-8")
i = f1.read().replace("天","日") # 將文件中全部內容讀取 容易導致記憶體溢出f1.write(i)
f.close()
f1.close()
os.rename("a2","a3")
os.rename("a1","a2")
with open("a3","r",encoding="utf-8")as f,\
open('a2',"r",encoding="utf-8")as f1:
print(f.read())
print(f1.read())