前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python办公自动化案例实战

Python办公自动化案例实战

原创
作者头像
软件架构师Michael
发布2023-12-22 22:09:38
2271
发布2023-12-22 22:09:38
举报
文章被收录于专栏:软件工程师Michael

⾃动化办公包括内容:

1. 基本⽂件操作,⽐如批量操作txt、csv、excel、word、pdf等

2. 这⾥操作包括:⽂件打开、读取、写⼊

我们先从哪⾥讲起?先从基本的⽂件查找、分类开始。

⽐如查找某个⽂件,在某个⽂件夹⾥,还包括从⽂件⽬录(也就是包括多个⽂件夹);查找指定

后缀名的所有⽂件

还包括哪些任务:从⼀个⽬录剪切或复制某个⽂件到另⼀个⽂件,剪切或复制某个⽂件夹到另⼀

个⽬录

掌握这些基本的⽂件操作后,我们将开始从操作txt⽂件开始,包括打开、读取、写⼊,从指定⾏

开始读取,分⽚读取⼤⽂件等

然后再讲解操作excel⽂件,这是⽐较常⽤的⼀类⽂件

然后再讲解Python操作word⽂档

最后再讲解操作pdf⽂档

1 某个⽂件夹下查找某个⽂件

请下载资料包,并在Pycharm中运⾏程序

代码语言:python
代码运行次数:0
复制
# 连续在res⽂件夹内查找某个⽂件
import os
# 获取当前路径
cur_dir = os.path.dirname(os.path.abspath(__name__))
# 获取当前路径⽗⽬录
parent_dir = os.path.dirname(cur_dir)
# 定位到res⽂件夹
find_path = os.path.join(parent_dir, 'res')
while 1:
 find_file_name = input(f"请提示你想在{find_path}中查找的⽂件名:(按q退出) ")
 if find_file_name == 'q':
 break
 file_exists = False # 表示是否存在
 for item in os.listdir(find_path):
 if item == find_file_name:
 file_exists = True
 break
 if file_exists:
 print("⽂件找到")
 else:
 print("⽂件未找到")

2 递归查找在res⽂件夹内查找某个⽂件

代码语言:python
代码运行次数:0
复制
import os
# 获取当前路径
cur_dir = os.path.dirname(os.path.abspath(__name__))
# 获取当前路径⽗⽬录
parent_dir = os.path.dirname(cur_dir)
# 定位到res⽂件夹
find_path, file_path = os.path.join(parent_dir, 'res'), None
while 1:
 find_file_name = input(f"请提示你想在{find_path}中查找的⽂件名:(按q退出) ")
 if find_file_name == 'q':
 break
 file_exists = False # 表示是否存在
 for root, dirs, files in os.walk(find_path):
 for item in files:
 if item == find_file_name:
 file_exists = True
 file_path = os.path.join(root, item)
 break
 if file_exists:
 break
 if file_exists:
 print(f"在路径:{file_path}中找到⽂件")
 else:
 print("⽂件未找到")

3 根据⽂件后缀名查找⽂件

代码语言:python
代码运行次数:0
复制
# 第⼀件事情,os.path.splitext()中传⼊item(⽂件名是**.&&&】)
# 这时,返回的结果是列表:["**", ".&&&"]
# [1]表示选择上⾯列表中,下标为1的元素,即选出".&&&"
# 第三件事情,lower()函数将".&&&"中的⼤写英⽂字⺟统⼀转为⼩写
# 这时的extension赋值的结果为".docx",字⺟是⼩写
import os
# 获取当前路径
cur_dir = os.path.dirname(os.path.abspath(__name__))
# 获取当前路径⽗⽬录
parent_dir = os.path.dirname(cur_dir)
extension_name = input(f"你想要查找哪写后缀名⽂件,不同⽂件类型间⽤,隔开(如xlsx,mp3等
tmp_extensions = extension_name.split(",")
extensions = ['.' + item for item in tmp_extensions]
found_files_count = 0
for item in os.listdir(os.path.join(parent_dir, 'res')):
 extension = os.path.splitext(item)[1].lower()
 if extension in extensions:
 print(f"【找到⽂件】" + item)
 found_files_count += 1
print(f"⼀共有{found_files_count}个⽂件")

4 归移动到⽂件

代码语言:python
代码运行次数:0
复制
import os
import shutil
source_folder_name = input("输⼊想要操作的⽂件夹:")
file_extension = input("输⼊想要复制⽂件后缀(格式为xlsx等)")
target_folder = input("输⼊移动到⽂件夹名称")
mv_files = []
for root, folders, files in os.walk(source_folder_name):
 for cur_file in files:
 if os.path.splitext(cur_file)[1] == '.' + file_extension:
 mv_files.append(os.path.join(root, cur_file))
# 剪切这些⽂件
if input('你确定要移动吗?(y/n)') == 'y':
 for cp_file in mv_files:
 if os.path.exists(os.path.join(target_folder, os.path.basename(cp_file
 continue
 shutil.move(cp_file, target_folder)
 print("Done")

5 递归复制⽂件

代码语言:python
代码运行次数:0
复制
import os
import shutil
source_folder_name = input("输⼊想要操作的⽂件夹:")
file_extension = input("输⼊想要复制⽂件后缀(格式为xlsx等)")
target_folder = input("输⼊复制到⽂件夹名称")
cp_files = []
for root, folders, files in os.walk(source_folder_name):
 for cur_file in files:
 if os.path.splitext(cur_file)[1] == '.' + file_extension:
 cp_files.append(os.path.join(root, cur_file))
# 复制这些⽂件
for cp_file in cp_files:
 shutil.copy(cp_file, target_folder)
print("Done")

6 递归删除

代码语言:python
代码运行次数:0
复制
import os
source_folder_name = input("输⼊想要操作的⽂件夹:")
file_extension = input("输⼊想要删除⽂件后缀(格式为xlsx等)")
del_files = []
for root, folders, files in os.walk(source_folder_name):
 for cur_file in files:
 if os.path.splitext(cur_file)[1] == '.' + file_extension:
 del_files.append(os.path.join(root, cur_file))
# 删除这些⽂件
if input('你确定要删除吗?(y/n)') == 'y':
 for cp_file in del_files:
 os.remove(cp_file)
 print("Done")

7 整理为模块

代码语言:python
代码运行次数:0
复制
import os
import shutil
def copy_files(source_folder_name, target_folder, file_extension='xlsx'):
 """
 批量复制指定后缀名的⽂件
 :param source_folder_name:
 :param target_folder:
 :param file_extension:
 :return:
 """
 cp_files = []
 for root, folders, files in os.walk(source_folder_name):
 for cur_file in files:
 if os.path.splitext(cur_file)[1] == '.' + file_extension:
 cp_files.append(os.path.join(root, cur_file))
 # 复制这些⽂件
 for cp_file in cp_files:
 shutil.copy(cp_file, target_folder)
 print("Done")
def delete_files(source_folder_name, file_extension='xlsx'):
 """
 批量删除指定后缀名的⽂件
 :param source_folder_name:
 :param file_extension:
 :return:
 """
 del_files = []
 for root, folders, files in os.walk(source_folder_name):
 for cur_file in files:
 if os.path.splitext(cur_file)[1] == '.' + file_extension:
 del_files.append(os.path.join(root, cur_file))
 # 删除这些⽂件
 for cp_file in del_files:
 os.remove(cp_file)
 print("Done")
def move_files(source_folder_name, target_folder, file_extension='xlsx'):
 """
 批量移动指定后缀名的⽂件
 :param source_folder_name:
 :param target_folder:
 :param file_extension:
 :return:
 """
 mv_files = []
 for root, folders, files in os.walk(source_folder_name):
 for cur_file in files:
 if os.path.splitext(cur_file)[1] == '.' + file_extension:
 mv_files.append(os.path.join(root, cur_file))
 # 剪切这些⽂件
 for cp_file in mv_files:
 if os.path.exists(os.path.join(target_folder, os.path.basename(cp_file
 continue
 shutil.move(cp_file, target_folder)
 print("Done")
def walk_to_find(find_path, find_file_name):
 """
 路径find_path中递归查找⽂件find_file_name
 :param find_path:
 :param find_file_name:
 :return:
 """
 result_path = []
 for root, dirs, files in os.walk(find_path):
 for item in files:
 if item == find_file_name:
 file_path = os.path.join(root, item)
 result_path.append(file_path)
 if len(result_path) > 0:
 print("找到⽂件")
 print("\n".join(result_path))
 else:
 print("⽂件未找到")
 return result_path
def find_extension(find_path, extension_name='xlsx,mp3'):
 """
 递归查找指定后缀名的⽂件
 :param find_path:
 :param extension_name:
 :return:
 """
 tmp_extensions = extension_name.split(",")
 extensions = ['.' + item for item in tmp_extensions]
 result_path = []
 for cur_dir, folders, files in os.walk(find_path):
 for item in files:
 extension = os.path.splitext(item)[1].lower()
 if extension in extensions:
 result_path.append(os.path.join(cur_dir, item))
 if len(result_path) > 0:
 print("\n".join(result_path))
 else:
 print("未找到")
def stat_file(folder_name):
 """
 统计⽂件个数,⽂件夹个数
 :param folder_name:
 :return:
 """
 file_count, folder_count = 0, 0
 if folder_name:
 for dir, folders, files in os.walk(folder_name):
 file_count += len(files)
 folder_count += len(folders)
 print(f"{folder_name}⾥⼀共包括:{file_count}个⽂件, {folder_count}个⽂件夹
 return file_count, folder_count

【小结】

以上是Python办公自动化的常见玩法。里面的窍门还是有一些的,没有特别的技巧,唯手熟尔。

我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档