檔案
#檔案的簡單操作
#1、讀取檔案
file = open(“a.txt”,mode=“r”)
x=file.read()
print(x)
file.close()
#這裡的file 叫做檔案的句柄(變量)用來操作檔案第一個參數是檔案的路徑,第二個參數mode=通路檔案的類型,r表示讀,預設也是r模式
#2、寫檔案
file = open("a.txt",mode="w")
file.write("asdfghj")
file.close()
#檔案權限
#r表示隻讀,rb是以二進制格式打開一個檔案用于隻讀,r+表示打開一個檔案用于讀寫,rb+表示已二進制格式打開一個檔案用于讀寫
#w表示隻寫,wb表示以二進制格式打開一個檔案隻用于寫入,w+表示打開一個檔案用于讀寫,wb+表示以二進制格式打開一個檔案用于讀寫
#a表示打開一個檔案用于追加,不能讀,ab表示以二進制打開一個檔案用于追加,a+是打開一個檔案用于讀寫,ab+是以二進制打開一個檔案用于追加
檔案操作
#讀操作
#read() 一次性讀取檔案的全部内容,括号内可以指派規定讀取的長度
file = open("a.txt")
ret = file.read()
print(ret)
file.close()
#readline() 每次讀取一行,并且自帶換行功能,每一行末尾會讀到\n
file = open("a.txt")
ret = file.readline()
print(ret)
#readlines() 一次性以行的形式讀取檔案的所有内容并傳回一個list,需要去周遊讀出來
file = open("a.txt")
ret=file.readlines()
print(ret,type(ret))
#循環讀取 file句柄是一個可疊代的對象,是以可以循環讀取檔案中的内容,每次讀一行
file = open("a.txt")
for line in file:
print(line)
#寫操作
#write()
file = open("a.txt",mode="w")
file.write("aaaaa")
file.write("werewwe")
file.close()
#writelines file.writelines(seq) 把seq的内容全部寫到檔案中(多行一次性寫入)
file = open("a.txt",mode="w")
lst = ["aa\n","ddfd","werdf"]
file.writelines(lst)
file.close()
#with 使用本方法操作檔案,可以不用關閉檔案,會自動關閉檔案
with open("a.txt") as file :
ret= file.read()
print(ret)
#亂碼
#Python讀寫檔案時,預設使用的編碼為平台編碼,也就是gbk,在pycharm中建立的檔案預設使用的是utf-8編碼
with open(“a.txt”,mode=“w”,encoding=“utf-8”) as f:#encoding="utf-8"就是規定了編碼
f.write(“哈哈哈”)
os子產品
重命名檔案 os.rename()
import os
os.rename("a.txt","sd.txt")
#删除檔案os.remove()
import os
os.remove("sd.txt")#如果是目錄的話會報錯
建立目錄 mkdir() 生成的單層目錄
import os
os.mkdir("zzz")
#建立多級目錄makedirs()
os.makedirs("xxxxx\\xxxxx\\xxxxx")
#删除目錄 rmdir() 删除一層目錄
import os
os.rmdir("zzz")
#删除多級目錄
os.removedirs("xxxxx\\xxxxx\\xxxxx")
#擷取目前所在目錄 getcwd()
import os
path = os.getcwd()
print(path)
#擷取目錄清單os.listdir(path)
import os
lst=os.listdir(os.getcwd())
print(lst)
#切換所在目錄 chdir()
import os
print(os.getcwd())
os.chdir(os.getcwd()+"\\aaa")
print(os.getcwd())
#判斷檔案或檔案夾是否存在
import os
b=os.path.exists("5.5learn.py")
c=os.path.exists("aaa")
d=os.path.exists("wwwww.py")
e=os.path.exists("qqqqq")
print(b,c,d,e)#True True False False
#判斷是否為檔案 isfile()
import os
print(os.path.isfile("aaa"))#False
print(os.path.isfile("5.5learn.py"))#True
#判斷是否為目錄 isdir()
import os
print(os.path.isdir("aaa"))#True
print(os.path.isdir("5.5learn.py"))#False
#判斷是否為絕對路徑
import os
print(os.path.isabs("d:\\pywork\\aaa"))#True
print(os.path.isabs("aaa"))#False
#擷取絕對路徑
import os
abspath = os.path.abspath("aaa")
print(abspath)
#擷取路徑中的最後部分
import os
path = os.path.basename("d:\\pywork\\aaa")
print(path)#aaa
#擷取路徑中的路徑部分
import os
path=os.path.dirname("d:\\pywork\\aaa")
print(path)#d:\pywork
#自定義mkdirs方法
import os
def mkdirs(path):
file_lst=path.split("/")
for file in file_lst:
if not os.path.exists(file):
os.mkdir(file)
os.chdir(file)
if __name__=="__main__":
path=input("請輸入")
mkdirs(path)
#檔案搜尋
練習遞歸
‘’’
使用者輸入檔案名以及開始搜尋的路徑,搜尋該檔案是否存在,如遇到檔案夾,則進入檔案夾繼續搜尋
‘’’
import os
import sys
sys.setrecursionlimit(1000) # set the maximum depth as 1500
def file_find(file_path, file_name):
if os.path.isdir(file_path):
file_list = os.listdir(file_path)
for each in file_list:
temp_dir = file_path + os.sep + each
if os.path.isdir(temp_dir):
temp = file_find(temp_dir, file_name)
if temp == True:
return True
elif os.path.isfile(temp_dir) and each == file_name:
return True
return False
else:
print('{}不是一個目錄'.format(file_path))
print(file_find(os.getcwd(), 'b.txt'))
練習遞歸
#通過給定的檔案夾, 列舉出這個檔案夾當中, 所有的檔案,以及檔案夾, 子檔案夾當中的所有檔案
import os
def listFilesToTxt(dir, file):
file_list = os.listdir(dir)
for file_name in file_list:
new_fileName = dir + "/" + file_name
if os.path.isdir(new_fileName):
file.write(new_fileName + "\n")
listFilesToTxt(new_fileName, file)
else:
file.write("\t" + file_name + "\n")
file.write("\n")
f = open(os.getcwd() + "\\list.txt", "a", encoding='utf-8')
listFilesToTxt(os.getcwd() + "\\dir", f)