python_办公自动化_常见文件(文件夹)操作
前言
本周开始正式学python,由于python的应用场景较多,比如爬虫,python办公自动化等等.然后就感觉python办公自动化应该比较简单,所以简单学了一下.本文是学习记录,主要是记录一些小脚本.如有错误,欢迎指正.
参考教程:https://www.bilibili.com/video/BV1Th411W7bo/?spm_id_from=333.337.search-card.all.click&vd_source=2293bafd0dc9ba39864a22335638ecfc
案例1:批量移动文件/文件夹
#前提:都需要导入os,shutil模块
import os
import shutil
#判断和创建文件夹:
if os.path.exits('packge01'):
print("存在")
else:
os.mkdir('packge01')
#删除
shutil.rmtree('packge01')
#复制并移动文件
shutil.copy("demo01.py","package01")
shutil.copytree('naval','package01/noval2')
#其中的noval2可与naval相同,也可不同,该操作的作用是将当前目录下的naval文件夹下的所有东西的复制到package01/noval2文件夹下
#只是移动文件/文件夹,不进行复制
shutil.move('a.txt','package01/noval')
#切换目录
os.chdir('package01/noval')#有一个拼凑过程,这里package01是位于当前目录下的文件夹,而不是最高级目录下的文件夹
#显示出当前路径
print(os.getcwd())
#删除当前目录下的文件
os.remove('a.txt')
案例2.文件的创建与读取:
文件的读操作:
#文件的读操作
f = open('a.txt',mode='r') #若是txt文件,则可以删去mode='r'这个部分
#常用的open()参数(尤其对于二进制而言):open('a.txt',mode='rb',encoding='utf-8'),读二进制数时需要加上b
context = f.read()
#可以限定读取的字符数量:f.read(20),读取前20个字符
print(context)
f.close()
with open('a.txt') as f:
context = f.read();
print(context)
判断文件的编码方式:https://blog.csdn.net/tcc2430/article/details/87282770
#方式1
# -*- coding: utf-8 -*-
import chardet
import string
import os
os.chdir(r'F:\文本分析')
file='rg2.csv'
with open(file, 'rb') as f:
data = f.read()
f_charInfo=chardet.detect(data)
print (f_charInfo)
#方式二
import codecs
def handleEncoding(original_file,newfile):
#newfile=original_file[0:original_file.rfind(.)]+'_copy.csv'
f=open(original_file,'rb+')
content=f.read()#读取文件内容,content为bytes类型,而非string类型
source_encoding='utf-8'
#确定encoding类型
try:
content.decode('utf-8').encode('utf-8')
source_encoding='utf-8'
except:
try:
content.decode('gbk').encode('utf-8')
source_encoding='gbk'
except:
try:
content.decode('gb2312').encode('utf-8')
source_encoding='gb2312'
except:
try:
content.decode('gb18030').encode('utf-8')
source_encoding='gb18030'
except:
try:
content.decode('big5').encode('utf-8')
source_encoding='gb18030'
except:
content.decode('cp936').encode('utf-8')
source_encoding='cp936'
f.close()
#按照确定的encoding读取文件内容,并另存为utf-8编码:
block_size=4096
with codecs.open(original_file,'r',source_encoding) as f:
with codecs.open(newfile,'w','utf-8') as f2:
while True:
content=f.read(block_size)
if not content:
break
f2.write(content)
文件的写(w-覆盖,a-追加,与C相似)操作:
with open('b.txt',mode= 'a+',encoding='gbk') as f:
f.write('hello world i love 122')
案例3:
import os
import datetime
import shutil
import glob # 更方便的实现递归的遍历
path = input("请输入要查询的路径: ")
os.chdir(path)
if not os.path.exists('最新视频'): # 这里if语句还与not相配合
os.mkdir('最新视频') # 没有则创建这个文件夹
for dirpath, dirname, files in os.walk('./'): # os.walk返回三元组的数据
for file in os.scandir(dirpath): # 这两个for循环对文件进行遍历
if file.name.endswitch('.mp4'): # 判断遍历的文件是否是以mp4结尾,file.name指的是字符串
tm = datetime.datetime.fromtimestamp(file.stat().st_mtime) # 获取修改时间
# fIle.stat().st_mtime指的是获取时间戳,fromtimestamp()是进行格式化转换
new_file = str(tm.year) + '-' + str(tm.month) + '-' + str(tm.day) + '-' + file.name # 拼接新的文件名
os.rename(dirpath + '/' + file.name, new_file) # 进行文件的重命名,dirpath指的是当前目录
file_ls = glob.glob('*.mp4') #glob.glob()进行文件的搜索
for name in file_ls:
shutil.move(name, '最新视频/') # 移动所有的文件,把name文件移动到最新视频这个文件夹下,加反斜杠来表示他是一个目录
print('Over!')
更多:(链接)
os.path.abspath() :规范化路径
案例4:临时文件(文件夹)的创建
临时文件的创建:tempfile模块
摘要:
1.涉及1个模块:tempfile,两个类:TemporaryDirectory和TemporaryFile
2.TemporaryFile的中有一个delete参数,默认值为true(即删除),若改为false,则为不删除
from tempfile import TemporaryDirectory,TemporaryFile
#临时dir
from tempfile import TemporaryDirectory,TemporaryFile
with TemporaryDirectory() as temp_dir:
print('文件夹已经创建: ',temp_dir)
#临时file
with TemporaryFile(mode='w+') as temp_file:
#当读取的文件不是二进制时,就要必须写:mode="w+"
temp_file.write('我是一个文件搬运工! ')
temp_file.seek(0)#相当于是移动指针到最初的位置
data = temp_file.read()
print(data)
案例5.压缩和解压缩文件:
摘要:
1.涉及两个模块:os,zipfile
摘要:
解决乱码:
print(file_name.encode('cp437').decode('utf-8'))
压缩:
import os
import zipfile
dir_list = os.listdir()
# print(dir_list) # 读取所有的file和directorary
# 将后缀名为.txt的文件的复制产物放到压缩包myfile.zip中
with zipfile.ZipFile('myfile.zip', 'w') as zipobj: # 注意myfile.zip中一定要加后缀
#关于w:压缩文件在代码执行之前,在当前目录下必须不存在,如果存在,则应将w改为a
for file in dir_list: # 可见in后面必须是list(字典)
if file.endswith('.txt'):
zipobj.write(file)
#查看压缩包里有哪些文件;若想查看文件的具体内容,则需要先解压
with zipfile.ZipFile('myfile.zip', 'r') as zipobj:
print(zipobj.namelist())
解压缩:
import os
import zipfile
with zipfile.ZipFile('myfile.zip', 'r') as zipobj:
#解压单个文件
zipobj.extract('a.txt','./') #要预先知道压缩包名称,待解压的file的名称
#解压所有文件:
zipobj.extractall('file/')
案例6:综合应用:
import os
import shutil
import zipfile
from datetime import datetime
# 输入路径
path = input('请输入路径: ')
os.chdir(path)
# 创建文件列表并遍历当前路径的文件
file_list = []
for dirpath, dirname, files in os.walk('./'):
# 获取每个文件夹中的文件,即遍历所有的dir和file
for file in os.scandir(dirpath):
# 判断是否是一个文件夹:
if not file.is_dir():
# 如果不是文件夹则获取文件的创建时间
file_time = file.stat().str_mtime
file_datetime = datetime.fromtimestamp(file_time)
datetime_delta = datetime.now() - file_datetime
# 获取是md文件并且是大于1个月的文件
if datetime_delta.days >= 31 and file.name.endswitch('md'):
# 构造新的名字
new_name = f'{file_datetime.strftime("%Y-%m-%d")}-{file.name}'
# 对文件进行重命名
os.rename(dirpath + '/' + file.name, new_name)
# 将重命名的文件追加到file_list列表
file_list.append(new_name)
print(file_list)
# 判断是否存在'长期未使用'文件夹,没有则创建
if not os.path.exists('长期未使用'):
os.mkdir('长期未使用')
# 将所有file_list中的文件批量移动到"长期未使用"
for filel in file_list:
shutil.move(filel, '长期未使用/')
# 切换操作目录到长期未使用,并获取里面的文件
os.chdir('长期未使用/')
zipfile_list = os.listdir('./')
# 将里面所有文件进行压缩打包
zip_filename = f'{datetime.now().strftime("%Y-%m-%d")}_长期未使用.zip' # 最外层必须是单引号
with zipfile.ZipFile(zip_filename, 'w') as zipobj:
for file in zipfile_list:
zipobj.write(file)
小结
常用的模块如下:(PS:某些模块好像在SSTI里出现过)
os,shutil,chardet,datetime,glob(递归,遍历),tempfile(临时文件),zipfile(压缩文件)
其中重点介绍一下os.shutil,datetime,glob模块
os模块:
os.chdir():改变当前目录到指定路径,即切换目录
os.mkdir():创建文件夹
如: os.mkdir('packge01')
os.path.exits():判断当前目录下文件的存在与否,存在返回true,否则返回false,常用于if语句
如: if os.path.exits('packge01')
os.getcwd():当前路径,print(os.getcwd())表示打印当前文件所在路径
如: print(os.getcwd())
os.remove():删除当前目录下的文件
如: os.remove('a.txt')
os.scaner():常用于对目标的遍历
如: for file in os.scandir(dirpath): # 这两个for循环对文件进行遍历
shutil模块:
shutil.rmtree():删除文件
如:shutil.rmtree('packge01')
shutil.copy:将文件从源复制到目标路径
如: shutil.copy("demo01.py","package01")
shutil.copytree:将文件夹从源复制到目标路径
如: shutil.copytree('naval','package01/noval2')
shutil.move:将文件从源移动到目标路径
如: shutil.move('a.txt','package01/noval')
其他:
chardet:
chardet.detect():检测文件编码
chardet.detect("hello world")
glob:
glob.glob():对目标文件进行文件的递归遍历检索,涉及到正则
如:file_ls = glob.glob('*.mp4') #glob.glob()进行文件的搜索
datetime:
tm = datetime.datetime.fromtimestamp(file.stat().st_mtime) # 获取修改时间
tm.year,tm.month,tm.day:分别获得年,月,日
这里只是简单的小结,还得多多模仿案例,直到自己能独立敲下案例中的代码为止.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!