0.前言

类似于数据库的基本操作增删改查,工作中会经常出现使用python完成文件操作。

本文作者实现文件操作相关函数。

1.增

1.1 写入内容给文本文件

def writeTextFile(filePath, fileContent, encoding='utf8'):

with open(filePath, 'w', encoding=encoding) as file:

file.write(fileContent)

1.2 复制文件夹

函数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函数, 此函数经常报错OS Error,所以自己编写deleteDirectory函数。

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 创建空文件夹

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 根据文件夹路径dirPath、文件中内容partOfFileContent、文件名partOfFileName得出文件路径

传入3个参数:文件夹路径dirPath、指定内容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)

python文件操作完成_基于python的文件操作相关推荐

  1. python如何爬取图片到指定文件夹论文_基于Python的图片爬虫程序设计

    互联网中包含大量有价值的 数据,网络爬虫通过既定规则可 以自动地抓取互联网数据并下载 至本地存储.研究网络爬虫的工 作原理和基于 Python 网络信息爬 取技术模块功能,基于 Requests- B ...

  2. python查询银行汇款_基于Python实现一个简单的银行转账操作

    前言 在进行一个应用系统的开发过程中,从上到下一般需要四个构件:客户端-业务逻辑层-数据访问层-数据库,其中数据访问层是一个底层.核心的技术.而且在实际开发中,数据库的操作也就是说数据访问层都是嵌套在 ...

  3. python电影推荐算法_基于Python的电影推荐算法

    原标题:基于Python的电影推荐算法 第一步:收集和清洗数据 数据链接:https://grouplens.org/datasets/movielens/ 下载文件:ml-latest-small ...

  4. 用python做炒股软件-python程序源码_基于python的炒股软件

    股票模拟交易系统设计与实现 不但能够进行界面的设计,还可以实现各个窗口的关联,通过WPF实现和其余窗口的关联,而且WPF中的类不但能够和其中一个窗口进行关联,还可以跟许多功能操作接口,WPF在对窗口对 ...

  5. autocad python二次开发_基于Python AutoCAD ActiveX 二次开发,pyautocad应用技术

    AutoCAD应用程序开发系列 基于Python AutoCAD ActiveX 二次开发技术 主要库:pyautocad==0.2.0 内容#:基于Python AutoCAD ActiveX 二次 ...

  6. python数据接口设计_基于python的接口测试框架设计(一)连接数据库

    基于python的接口测试框架设计(一)连接数据库 首先是连接数据库的操作,最好是单独写在一个模块里, 然后便于方便的调用,基于把connection连接放在__init__()方法里 然后分别定义D ...

  7. python人脸识别库_基于Python的face_recognition库实现人脸识别

    Python Python开发 Python语言 基于Python的face_recognition库实现人脸识别 一.face_recognition库简介 face_recognition是Pyt ...

  8. python编程控制机器人_基于Python开发的微信图灵机器人

    在过去的几个月中,由于在新生群中回答问题费时费力,同时又有许多重复而又有固定答案的回答,我受到一些知乎文章的启发,维护了一个基于itchat的群聊机器人.从刚开始接入图灵机器人时只会尬聊的机器人,之后 ...

  9. python多叉树遍历_基于Python的多叉树遍历算法

    [ 综直厘翹 S 赛理 ) 信息记录材料 2019 年 5 月第 20 卷第 5 期 基于 Python 的多叉树遍历算法 钱雨波 , 王金祥 ( 指导老师 ) ( 延边大学 吉林 延边 1 3300 ...

  10. python开发语音录入_基于python实现语音录入识别代码实例

    这篇文章主要介绍了如何通过python实现语音录入识别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.介绍 1.第一步录音存入本地 2.调用百度 ...

最新文章

  1. mysql 类型转换 cast 将 float 转换为 decimal
  2. chrome浏览器插件开发经验(一)
  3. ecies算法c语言实现,Bouncy Castle算法库中ECIES算法调用示例
  4. ArcGIS教程:Iso 聚类非监督分类
  5. php 动态参数,PHP 动态配置运行时环境参数ini_xxx,extension_loaded
  6. 股票涨跌停的买卖问题
  7. SpringCloud 教程 | 第六篇: 分布式配置中心 (Spring Cloud Config)
  8. 【流媒体开发】6、ffplay命令
  9. vscode快速格式化代码
  10. 【机器学习】21个机器学习面试问答
  11. 西门子opc服务器注册,西门子OPC服务器怎么做
  12. 阿里笔试--智能对话简化版之query指令槽位识别
  13. Azure中配置网络安全组入站规则让外部网络访问VM中的网站
  14. app注册协议通用模版
  15. 感应开关垃圾桶小项目的完成及问题解决——基于STC89C52RC单片机
  16. git push 使用中遇到的Permission to xxx denied to xxx问题终极解决方案
  17. python中import文件夹下面py文件,报错
  18. python绘制单线图_如何绘制管道单线图
  19. 带你了解CSS开发中的10个不要
  20. 简历上的哪些内容才是 HR 眼中的干货?

热门文章

  1. linux 内核 内存管理 bootmem alloctor 申请内存
  2. python交换两个值原理_python交换两个变量的值方法
  3. ArcGIS教程:降雨量插值
  4. 漫谈Clustering:高斯混合模型(GMM)
  5. 比例化简 详解(C++)
  6. mysql 无法连接 native_php无法连接mysql8 mysql_native_password
  7. numpy array和python list_Python list与NumPy array 区分详解
  8. kettle linux下的目录怎么看_Linux系统各目录下指令解析
  9. python中变量pa和pa一样吗_仅限python中的pafy和vlc音频
  10. python123基本统计值计算_基本统计值计算