5.2文件的讀寫
5.2.1讀數據
(1)read
使用read(num)可以從文件中讀取數據,num表示要從文件中讀取的數據的長度(單位是字節),如果沒有傳入num,那麼就表示讀取文件中所有的數據
如果讀了多次,那麼後面讀取的數據是從上次讀完後的位置開始的
(2)readlines
就像read沒有參數時一樣,readlines可以按照行的方式把整個文件中的內容進行一次性讀取,並且返回的是一個列表,包含換行符\n,其中每一行的數據爲一個元素
(3)readline
每次讀一行
5.2.2寫數據write
使用write()可以完成向文件寫入數據。如果文件不存在那麼創建,如果存在那麼就先清空,然後寫入數據
5.3文件指針
(1)tell()
可用來顯示文件指針的位置,字符數(windows系統中每行末尾會加上\r\n,(\r表示回行首,\n表示換行),但用read去讀的時候只會讀\n,不會讀\r。
(2)seek()
seek(偏移量,whence) # 更改文件指針的位置
其中,偏移量在python3中是數字且僅能是正值,距離whence的字符數;whence可以取三個值:0:文件開頭;1:當前位置;2:文件結尾
總結:文件指針操作都包含\r\n(Windows中),但讀數據的時候只包含\n
5.4查看文件信息
print(f.name) #查看文件名
print(f.mode) #查看訪問權限
print(f.encoding) #查看編碼方式
print(f.closed) #檢查文件是否關閉,返回True或者False
print(f.readable)
print(f.writeable)
5.5清空緩衝區(瞭解)
f.flush()
#清空緩衝區域(釋放這個區域,將來可以分配任何數據),將緩衝區數據寫入到硬盤
5.6操作目錄(文件的相關操作)(os模塊)
路徑:相對路徑(從當前位置出發)和絕對路徑(以盤符出發)
文件的相關操作:
# 查看當前文件所在路徑
import os
file_path = os.getcwd()
print(file_path)
# 查看某個路徑下的所有文件---返回一個列表
list1 = os.listdir(r'C:\Users') #./表示當前路徑
print(list1)
#改變文件的操作路徑
os.chdir('../')#小括號裏可以是任意想操作的路徑
#創建單個文件夾
os.mkdir('aaa')
#遞歸創建文件夾
os.makedirs(r'aaa\bbb\ccc')
#刪除ccc
os.rmdir(r'aaa\bbb\ccc')
注意:os模塊不允許遞歸刪除(即:aaa不爲空),想要遞歸刪用shutil()(慎用)
import shutil
shutil.rmtree(r'aaa')
#重命名rename(文件名,改成什麼名字)
os.rename('原文件名',‘要改成的名字’)
#刪除文件1.txt
os.remove('1.txt')
5.7文件批量重命名
# 把code文件夾的所有文件重命名爲 daqiu....
# 把這個路徑下的所有文件先查找到 -- 遍歷所有文件 :有一個新的名字daqiu.. rename(舊,新)
import os
os.chdir(r"C:\Users\GZC\Desktop\new")
path = os.getcwd()
list1 = os.listdir(path)
print(list1)
for temp in list1:
newname = 'daqiu' + temp
os.rename(temp,newname)
#用切片法可以還原到原來的,如下:
import os
path = os.chdir(r'C:\Users\GZC\Desktop\new')
list1 = os.listdir(path)
print(list1)
for name in list1:
if name.startswith('daqiu'):
newname = name[5:]
os.rename(name,newname)
5.8備份任意文件
import os
file_list = os.listdir('./') #如果想備份其它地方的數據,需用到chdir()
print(file_list)
file_name = input('請輸入要備份的文件名:')
if file_name in file_list:
index = file_name.rfind('.')
new_name = file_name[:index] + "_backup" + file_name[index:]
src_f = open(file_name, 'rb') # 音頻文件,所以要二進制模式打開
new_f = open(new_name, 'ab')
while True:
# 找一個變量保存每次讀取的數據
data = src_f.read(1024 * 1024)
if len(data) == 0:
break
new_f.write(data)
new_f.close()
src_f.close()
else:
print('文件不存在')