0.前言
類似于數(shù)據(jù)庫(kù)的基本操作增刪改查
稽鞭,工作中會(huì)經(jīng)常出現(xiàn)使用python完成文件操作剑肯。
本文作者實(shí)現(xiàn)文件操作相關(guān)函數(shù)乖菱。
1.增
1.1 寫入內(nèi)容給文本文件
def writeTextFile(filePath, fileContent, encoding='utf8'):
with open(filePath, 'w', encoding=encoding) as file:
file.write(fileContent)
1.2 復(fù)制文件夾
函數(shù)copyDirectory比shutil.copytree功能更強(qiáng)大助币,更不容易報(bào)錯(cuò)静陈。
import os
import shutil
def copyDirectory(old_dirPath, new_dirPath):
if not os.path.isdir(old_dirPath):
print('舊文件夾路徑錯(cuò)誤燕雁,不存在此文件夾')
return
fileName_list = list(os.walk(old_dirPath))[0][2]
if not os.path.isdir(new_dirPath):
os.makedirs(new_dirPath)
for fileName in fileName_list:
old_filePath = os.path.join(old_dirPath, fileName)
new_filePath = os.path.join(new_dirPath, fileName)
shutil.copy(old_filePath, new_filePath)
dirName_list = list(os.walk(old_dirPath))[0][1]
for dirName in dirName_list:
old_subDirPath = os.path.join(old_dirPath, dirName)
new_subDirPath = os.path.join(new_dirPath, dirName)
copyDirectory(old_subDirPath, new_subDirPath)
2.刪
2.1 刪除文件夾
本文作者使用過(guò)shutil庫(kù)的rmtree函數(shù), 此函數(shù)經(jīng)常報(bào)錯(cuò)OS Error鲸拥,所以自己編寫deleteDirectory函數(shù)拐格。
import os
def deleteDirectory(dirPath):
for walk in os.walk(dirPath):
dirPath_2 = walk[0]
fileName_list = walk[2]
for fileName in fileName_list:
filePath = os.path.join(dirPath_2, fileName)
os.remove(filePath)
for walk in list(os.walk(dirPath))[::-1]:
dirPath_2 = walk[0]
dirName_list = walk[1]
for dirName in dirName_list:
dirPath_3 = os.path.join(dirPath_2, dirName)
os.rmdir(dirPath_3)
if os.path.isdir(dirPath):
os.rmdir(dirPath)
2.2 創(chuàng)建空文件夾
import os
def makeDirectoryEmpty(dirPath):
if os.path.isdir(dirPath):
for walk in os.walk(dirPath):
dirPath_2 = walk[0]
fileName_list = walk[2]
for fileName in fileName_list:
filePath = os.path.join(dirPath_2, fileName)
os.remove(filePath)
for walk in list(os.walk(dirPath))[::-1]:
dirPath_2 = walk[0]
dirName_list = walk[1]
for dirName in dirName_list:
dirPath_3 = os.path.join(dirPath_2, dirName)
os.rmdir(dirPath_3)
else:
os.makedirs(dirPath)
3.改
3.1 批量修改圖片大小
import os
from PIL import Image
def getFilePathList(dirPath, partOfFileName=''):
allFileName_list = list(os.walk(dirPath))[0][2]
fileName_list = [k for k in allFileName_list if partOfFileName in k]
filePath_list = [os.path.join(dirPath, k) for k in fileName_list]
return filePath_list
def batchResizeImage(oldDirPath, newDirPath, height, width):
if not os.path.isdir(newDirPath):
os.mkdir(newDirPath)
jpgFilePath_list = getFilePathList(oldDirPath, '.jpg')
for jpgFilePath in jpgFilePath_list:
image = Image.open(jpgFilePath)
resized_image = image.resize((height, weight), Image.ANTIALIAS)
jpgFileName = os.path.split(jpgFilePath)[1]
saveFilePath = os.path.join(newDirPath, jpgFileName)
resized_image.save(saveFilePath)
oldDirPath = 'source_images'
newDirPath = 'train_images'
height = 640
width = 640
batchResizeImage(oldDirPath, newDirPath, height, width)
4.查
4.1 查詢文件夾中的文件
import os
def getFileNameList(dirPath, partOfFileName=''):
allFileName_list = list(os.walk(dirPath))[0][2]
fileName_list = [k for k in allFileName_list if partOfFileName in k]
return fileName_list
def getFilePathList(dirPath, partOfFileName=''):
allFileName_list = list(os.walk(dirPath))[0][2]
fileName_list = [k for k in allFileName_list if partOfFileName in k]
filePath_list = [os.path.join(dirPath, k) for k in fileName_list]
return filePath_list
def getFilePathList_2(dirPath, partOfFileName=''):
filePath_list = []
for walk in os.walk(dirPath):
subDirPath = walk[0]
fileName_list = [k for k in walk[2] if partOfFileName in k]
filePath_list.extend([os.path.join(subDirPath, k) for k in fileName_list])
return filePath_list
4.2 讀取文本文件
def readTextFile(filePath, encoding='utf8'):
with open(filePath, encoding=encoding) as file:
return file.read()
4.3 根據(jù)文件夾路徑dirPath、文件中內(nèi)容partOfFileContent刑赶、文件名partOfFileName得出文件路徑
傳入3個(gè)參數(shù):文件夾路徑dirPath捏浊、指定內(nèi)容partOfFileContent、代碼文件后綴名suffixOfFileName
import os
def searchFileContent(dirPath, partOfFileContent, partOfFileName=''):
dirPath = os.path.expanduser(dirPath)
for walk in os.walk(dirPath):
fileName_list = walk[2]
filePath_list = [os.path.join(walk[0], k) for k in fileName_list if partOfFileName in k]
for filePath in filePath_list:
try:
with open(filePath, encoding='gbk') as file:
fileContent = file.read()
except Exception as e:
try:
with open(filePath, encoding='utf8') as file:
fileContent = file.read()
except Exception as e:
pass
if partOfFileContent=='' or partOfFileContent in fileContent:
print(filePath)