目錄迴圈實現檔案copy
檔案操作方法
檔案修改
檔案是作業系統提供給使用者或應用程式操作硬碟的一種虛擬的概念。
使用者和應用程式可以通過檔案將資料永久儲存在硬碟中。操作檔案就是操作硬碟。
model引數:控制檔案讀寫內容,t 和 b,必須配合r a w使用。
t 文字模式(預設模式)
1.讀寫都以str為單位
2.必須是文字檔案
3.必須指定encoding(不指定的會使用系統預設的編碼)
b 二進位制模式(bytes)
open的模式1:控制檔案讀寫的模式
1.開啟檔案:open(『檔案路徑』)
絕對路徑:完整的路徑,從磁碟開始,一層層的寫
相對路徑:相對於當前程式所在的資料夾為起始開始找
with as 上下文管理
res=f.read()
print(res)
2、操作檔案:讀/寫檔案,應用程式對檔案的讀寫請求都是在向作業系統傳送系統呼叫,然後由作業系統控制硬碟把輸入讀入記憶體、或者寫入硬碟。
3.關閉檔案:.close( )
.close() # **作業系統資源
.read() # 變數f存在,但是不能再讀了
del f # **應用程式資源
r(預設操作模式):唯讀模式,全部讀取,有多少讀多少。當檔案存在時檔案指標跳到開始位置。
with open('c.txt',mode='rt',encoding='utf-8') as f:
print('第一次讀'.center(50,'*'))
res=f.read() # 把所有內容從硬碟讀入記憶體
print(res)
***************案例***************===
inp_username=input('your name>>: ').strip()
inp_password=input('your password>>: ').strip()
# 驗證
with open('user.txt',mode='rt',encoding='utf-8') as f:
for line in f:
# print(line,end='') # egon:123\n
username,password=line.strip().split(':')
if inp_username == username and inp_password == password:
print('login successfull')
break
else:
print('賬號或密碼錯誤')
2、w:只寫模式,當檔案不存在時會建立空檔案,當檔案存在會清空檔案,指標位於開始位置,不能讀。
強調1:
在以w模式開啟檔案沒有關閉的情況下,連續寫入,新的內容總是跟在舊的之後
with open('d.txt',mode='wt',encoding='utf-8') as f:
f.write('擦勒1\n')
f.write('擦勒2\n')
f.write('擦勒3\n')
強調2:
如果重新以w模式開啟檔案,則會清空檔案內容
with open('d.txt',mode='wt',encoding='utf-8') as f:
f.write('擦勒1\n')
with open('d.txt',mode='wt',encoding='utf-8') as f:
f.write('擦勒2\n')
with open('d.txt',mode='wt',encoding='utf-8') as f:
f.write('擦勒3\n')
3、a:只追加寫,在檔案不存在時會建立空文件,在檔案存在時檔案指標會直接調到末尾
with open('e.txt',mode='at',encoding='utf-8') as f:
# f.read() # 報錯,不能讀
f.write('擦嘞1\n')
f.write('擦嘞2\n')
f.write('擦嘞3\n')
強調 w 模式與 a 模式的異同:
1 相同點:在開啟的檔案不關閉的情況下,連續的寫入,新寫的內容總會跟在前寫的內容之後
2 不同點:以 a 模式重新開啟檔案,不會清空原檔案內容,會將檔案指標直接移動到檔案末尾,新寫的內容永遠寫在最後
案例:a模式用來在原有的檔案記憶體的基礎之上寫入新的內容,比如記錄日誌、註冊
註冊功能
name=input('your name>>: ')
pwd=input('your name>>: ')
with open('db.txt',mode='at',encoding='utf-8') as f:
f.write('{}:{}\n'.format(name,pwd))
了解:+不能單獨使用,必須配合r、w、a
mode=『rb』:唯讀
with open (r'c:\users\administrator\desktop\111.txt',mode='rb') as f:
res=f.read()
print(res,type(res))
print(res.decode('utf-8'))#指定解碼型別將二進位制數解碼成uft8輸出
結果:b'\xe9\x98\xbf\xe5\x87\xa1\xe8\xbe\xbeaaaa' 阿凡達aaaa
mode=『wb』:只寫
with open('a.txt',mode='wb') as f:
msg="你好"
res=msg.encode('utf-8') # res為bytes型別
f.write(res) # 在b模式下寫入檔案的只能是bytes型別
方式一:while迴圈讀檔案(可以指定一次讀取的位元組)
with open('a.txt',mode='wb') as f1:
with open('a.txt',mode='wb') as f2:
while=1:
res=f.read(1024)#不規定位元組的話一次全部讀取檔案的全部內容,可能導致占用太多記憶體計算機卡死。
f2=write(res)
if len (res)==0:
break
方式二:for迴圈讀檔案如果一行有太多位元組也能導致占用太多記憶體計算機卡死。
with open('a.txt',mode='wb') as f:
for line in f:#for迴圈預設換行符為分割符
res=line.read()
f2=write(res)
f.read() # 讀取所有內容,執行完該操作後,檔案指標會移動到檔案末尾
f.readline() # 讀取一行內容,游標移動到第二行首部
f.readlines() # 讀取每一行內容,存放於列表中
f.flush:立即寫入硬碟
f.write('1111\n222\n') # 針對文字模式的寫,需要自己寫換行符
f.write('1111\n222\n'.encode('utf-8')) # 針對b模式的寫,需要自己寫換行符
f.writelines(['333\n','444\n']) # 檔案模式
f.writelines([bytes('333\n',encoding='utf-8'),'444\n'.encode('utf-8')]) #b模式
其他操作:
f.readable() # 檔案是否可讀
f.writable() # 檔案是否可讀
f.closed # 檔案是否關閉
f.encoding # 如果檔案開啟模式為b,則沒有該屬性
f.flush() # 立刻將檔案內容從記憶體刷到硬碟
f.name #獲取檔名
file.next() #返回檔案下一行。python 3 中的 file 物件不支援 next() 方法。
file.truncate([size]) #從檔案的首行首字元開始截斷,截斷檔案為 size 個字元
控制指標移動
大前提:檔案內指標的移動都是bytes為單位的,唯一例外的是t模式下read(n),n以字元為單位
# 之前檔案內指標的移動都是由讀/寫操作而被動觸發的,若想讀取檔案某一特定位置的資料,則則需要用f.seek方法主動控制檔案內指標的移動,詳細用法如下:
# f.seek(指標移動的位元組數,模式控制): 如果移到末尾了就不能再往後移動了,指標只會停在末尾。
# 模式控制:
# 0: 預設的模式,該模式代表指標移動的位元組數是以檔案開頭為參照的
# 1: 該模式代表指標移動的位元組數是以當前所在的位置為參照的
# 2: 該模式代表指標移動的位元組數是以檔案末尾的位置為參照的
*強調:其中0模式可以在t或者b模式使用,而1跟2模式只能在b模式下用*
修改硬體中檔案的的方式只有乙個就是:覆蓋 python 檔案操作
簡明 python 教程 中的例子,python 執行出錯,用open代替file 可以執行。poem programming is fun when the work is done if you wanna make your work also fun use python f open e ...
python檔案操作
1,將乙個路徑名分解為目錄名和檔名兩部分 a,b os.path.split c 123 456 test.txt print a print b 顯示 c 123 456 test.txt 2,分解檔名的副檔名 a,b os.path.splitext c 123 456 test.txt pri...
Python 檔案操作
1.開啟檔案 如下 f open d test.txt w 說明 第乙個引數是檔名稱,包括路徑 第二個引數是開啟的模式mode r 唯讀 預設。如果檔案不存在,則丟擲錯誤 w 只寫 如果檔案 不存在,則自動建立檔案 a 附加到檔案末尾 r 讀寫 如果需要以二進位制方式開啟檔案,需要在mode後面加上...