Python实现办公自动化

  • Post author:
  • Post category:python


python 办公技巧实战分享,让你快速完成繁琐、重复的工作,解放你的双手,让有限的时间发挥最大的价值。让你的老板、同事刮目相待!!!



案列1. 将某个文件夹及其下面文件夹及文件全部剪切到一个文件夹


办公技巧分享1

–有时候文件夹里面的文件太多了,想把他们放在一起怎么办?难道去一个文件夹一个文件夹的剪切或复制?这样也太麻烦了,有时候还会忘记自己操作到哪里了,还要去一个文件夹一个文件夹的看是不是已经剪切完了。于是今天通过自己的一个办法可以实现这个功能,不管你的文件夹有多少个文件夹和文件,用这个程序都可以把它们放在一起!!


代码分享:

import os,shutil,time
class SumFiles():
    def __init__(self,path_source,dis_file=""):
        self.path_source=path_source
        self.dis_file=dis_file
    def makedir(self):#判断有无文件夹路径是否存在,不存在则新建文件夹
        dis_road=os.path.join(self.path_source,self.dis_file)
        if not os.path.isdir(dis_road):
            os.mkdir(dis_road)
        self.path_destination=dis_road
    def dealfile(self):#文件处理,如果有重复文件则改名。
        filelist = []#储存所有文件和改名字的文件路径
        files = []#储存所有的文件
        repeatfiles = []#储存重复的文件
        for path, x, filename in os.walk(self.path_source):
            for file in filename:
                newpath =os.path.join(path,file)
                if file in files and file not in repeatfiles:
                    i = 2
                    newfile = "(" + str(i) + ") " + file
                    newpath1 =os.path.join(path,newfile)
                    os.rename(newpath, newpath1)
                    newpath = newpath1
                    repeatfiles.append(file)
                elif file in files and file in repeatfiles:
                    i = 3
                    newfile = "(" + str(i) + ") " + file
                    newpath1 = os.path.join(path,newfile)
                    os.rename(newpath, newpath1)
                    newpath = newpath1
                    i += 1
                else:
                    newpath = newpath
                filelist.append(newpath)
                files.append(file)
        self.filelist=filelist
        self.repeatfiles=repeatfiles
    def movefile(self):#移动文件到目的文件夹
        path_destination =self.path_destination
        with open("C:\\Users\Administrator\Desktop\文件路径.txt", 'a') as f:
            f.write("剪切文件路径在:" +self.path_destination + "\n")
        for filename in self.filelist:
            try:
                shutil.move(filename, path_destination)
            except:
                pass
        print("..文件汇总完成!!汇总路径在:",path_destination)
        print("..重复文件:", self.repeatfiles)#输出重复文件
        time.sleep(3)
path_source = input('..输入需要剪切文件的路径:')
path_disfile=input("..请输入剪切目的文件夹名称:不输入则在当前路径!!")
if len(path_disfile)!=0:
    mysumfiles=SumFiles(path_source,path_disfile)
else:
    mysumfiles=SumFiles(path_source)
mysumfiles.makedir()
mysumfiles.dealfile()
mysumfiles.movefile()

运行结果:


…输入需要剪切文件的路径:F:\12records\12.1.6\dy\all

…请输入剪切目的文件夹名称:不输入则在当前路径!!xy

…文件汇总完成!!汇总路径在: F:\12records\12.1.6\dy\all\xy

…重复文件: []



案列2. 将文件夹内的所有符合条件的文件改名字


办公技巧分享2

–有时候文件夹里面的文件太多了,就可以用这个方法批量修改符合条件的文件,快速的修改文件的名字,如果有重复的名字会显示出来,自己在改改就可以了。


代码分享:

import os
path=input("..输入路径并按回车结束:")
def getallfiles(path):
    list = os.listdir(path)
    for i in range(0,len(list)):
        newpath=os.path.join(path,list[i])
        if os.path.isfile(newpath):
            rule=list[i].split('-')
            houzui=list[i].split('.')
            try:
                if len(rule)>=5 and houzui[-1]=="wav":
                    rule1=rule[5].split('_')
                    newname=rule[3]+rule[4]+rule1[0]+"_"+rule1[1]+rule1[2]+rule1[3]+"_"+rule[1]+".wav"
                    newpath1=os.path.join(path,newname)
                    os.rename(newpath,newpath1)
                elif houzui[-1]=='mp3':
                    if len(rule[0])>4 and len(rule)>3:
                        if rule[0][0] == "0":
                            rule[0] = rule[1][1:len(rule[1])]
                        newname=rule[2]+"_"+rule[3]+"_"+rule[0]+".mp3"
                        newpath1 = os.path.join(path, newname)
                        os.rename(newpath, newpath1)
                    if len(rule)>3:
                        if len(rule[1])>4 and len(rule)>3:
                            if rule[1][0]=="0":
                                rule[1]=rule[1][1:len(rule[1])]
                            newname=rule[2]+"_"+rule[3]+"_"+rule[1]+".mp3"
                            newpath1 = os.path.join(path, newname)
                            os.rename(newpath, newpath1)
            except:
                print("repeat files",list[i])
        else:
            getallfiles(newpath)
getallfiles(path)
print("..文件改名完成!!!")



案列3. 通过电话号码筛选与之符合的文件


办公技巧分享1

–通过一些条件来查找文件,并复制到一个文件夹内。如果按照一个一个找,那很麻烦,通过这个脚本可以快速的查文件。简单方便实用,

第一次运行会检查有相关需要的文件,如果没有,则会创建,让后把需要查找的条件输入进去,再次运行就可以将文件筛选出来。



代码分享:

import os,shutil
import time,sys
path_source=input('..输入需要查找文件路径:')
txtpath=os.path.join(path_source,"wj.txt")
path_dis=os.path.join(path_source,"sx")
if not os.path.exists(txtpath):
    print("不存在该文件,正在创建该文件夹")
    with open(txtpath,'w') as txt:
        pass
if not os.path.isdir(path_dis):
    os.mkdir(path_dis)
with open(txtpath) as txt:
    lines=txt.readlines()
    sin_files=[]
    for line in lines:
        if line not in sin_files:
            sin_files.append(line)
    print(len(sin_files))
    for path,x,filename in os.walk(path_source):
        try:
            for line in sin_files:
                # print(line.strip())
                line=line.replace("-",'')
                line=line.strip()
                if line[0:1]=="0":
                    line=line[1:]
                for file in filename:
                    newpath=path+'/'+file
                    if line in file and len(line)>=3:
                        print("正在复制文件->>"+file)
                        shutil.copy(newpath,path_dis)
        except:
            print(line)
print("查找复制结束")
time.sleep(2)



案列4. 快速匹配剪贴板的电话号码


办公技巧分享1

–快速匹配电话号码,复制内容,运行该程序,再次粘贴即是电话号码。


代码分享:

import pyperclip
import re
text=pyperclip.paste()
add_phone=re.findall(r'[\u4E00-\u9FA5]+\w?·?\d{0,3}\(?[\u4E00-\u9FA5]+\)?[\u4E00-\u9FA5]*',text,re.I)
phone=re.findall(r'(\d{3,4}-?\d{7,8})(,\d{3,4}?-?\d{7,8}?)*',text)#匹配电话号码
print(phone)
while True:
    if '\r\n' in add_phone:
        add_phone.remove('\r\n')
    elif '电话号码是' in add_phone:
        add_phone.remove('电话号码是')
    else:
        for i in add_phone:
            i.strip()
        break
# print(add_phone)
# print(phone)
for i in range(0,len(add_phone)):
    print(add_phone[i],"N",phone[i])


运行如下:

[(‘010-62752114’, ‘’), (‘025-83593186’, ‘’), (‘027-87541114’, ‘’), (‘010-58800260’, ‘’), (‘010-62896811’, ‘’), (‘022-27403536’, ‘’), (‘0931-8911114’, ‘’), (‘0451-86414060’, ‘’)]

北京大学 N (‘010-62752114’, ‘’)

南京大学 N (‘025-83593186’, ‘’)

华中科技大学 N (‘027-87541114’, ‘’)

北京师范大学 N (‘010-58800260’, ‘’)

中国农业大学 N (‘010-62896811’, ‘’)

天津大学 N (‘022-27403536’, ‘’)

兰州大学 N (‘0931-8911114’, ‘’)

哈尔滨工业大学 N (‘0451-86414060’, ‘’)

北京大学 010-62752114

南京大学 025-83593186

华中科技大学 027-87541114

北京师范大学 010-58800260

中国农业大学 010-62896811

天津大学 022-27403536

兰州大学 0931-8911114

哈尔滨工业大学 0451-86414060



版权声明:本文为xiaomao1993原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。