基于python的文件操作

0.前言

類似于數(shù)據(jù)庫的基本操作增刪改查,工作中會經(jīng)常出現(xiàn)使用python完成文件操作。
本文作者實現(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功能更強大,更不容易報錯。

import os
import shutil

def copyDirectory(old_dirPath, new_dirPath):
    if not os.path.isdir(old_dirPath):
        print('舊文件夾路徑錯誤,不存在此文件夾')
        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 刪除文件夾

本文作者使用過shutil庫的rmtree函數(shù), 此函數(shù)經(jīng)常報錯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個參數(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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,316評論 2 89
  • 一、基礎(chǔ)知識:1、JVM、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機...
    殺小賊閱讀 2,575評論 0 4
  • 昨天終于把《小狗錢錢》看完了,相見恨晚!為什么父母們、老師們在我們很小的時候向我們介紹并帶領(lǐng)我們讀一讀? 其實很多...
    阿拉是什么人閱讀 399評論 0 0
  • 剛聽了一堂課:孫圈的“你的崗位價值是如何計算的?“ 分析:行業(yè)-公司-部門-職業(yè) 行業(yè): 1、比如DYL的優(yōu)勢在于...
    驛動的風(fēng)閱讀 309評論 0 0
  • 最近作業(yè)很多,卻不想做。 考研想考檔案學(xué),但是好難啊。 到底是考公務(wù)員呢還是怎樣?
    瑞克_59ff閱讀 394評論 0 0

友情鏈接更多精彩內(nèi)容