python自动化的实践笔记

unpack(解压)

这个是用pyautogui实现的一个自动解压,因为压缩包里没有文件夹,需要新建一个和压缩包名字一样的文件夹,

逻辑

用7zip的图像识别,找到左上方的第一个图标,复制压缩包的名字,在空白处新建文件夹,名字就用刚才复制的,刚好文件夹就在压缩包的下面,继续找到7zip的图标,拖到新建的文件夹里,进入文件夹,解压,删除压缩包,返回上一层,重复操作

遇到的问题

‘新建文件夹’这个名字排序一开始是在前面的,后来就会排到后面,需要点一下右边的滑动条那个小箭头,最好是点一下,一开始点的次数多,到最后面就没办法自动化了,位置变了。

    for j in range(1):
        click(1357,697)

一些知识点

dragTo() 和 drag()

dragTO(point,duration,button)  # 拖拽到指定位置,这里就是从当前鼠标在的位置拖拽,有三个参数,duration是拖拽时间 
drag() # 相对当前鼠标位置,拖拽指定像素,

locateCenterOnScreen()

后面想起来可以直接定位图片的中心位置坐标,我当时用了个笨办法,先用box()返回图片的左上角坐标和长宽,然后算出来的中心点坐标

注意

文件夹里显示的方式必须是列表,刚好可以压缩包在新建文件夹的下面,拖拽的时候位置相对7zip.png的位置是固定的,这里的图像识别最好使用一个好识别的,像7zip只有黑白两种颜色,就很好识别


deleteheader(删除Word页眉页脚)

用os,win32com实现的批量给Word文档去页眉页脚的一个小工具

逻辑

用os.walk()遍历所有子文件夹,然后把子文件夹里的文件名取出来放在一个列表里,遍历列表里的文件名,然后截取文件名的拓展名,如果是doc,docx就调用removeHeaderFooter()函数,如果不是跳过。removeHeaderFooter()主要是用win32com实现

遇到的问题

win32com

有一些Word文件限制编辑,执行到会终止程序,暂时没什么好的解决办法,只能手动把文件弄出来再执行一次,但是这样就有很多重复执行了的,暂时想到的办法就是把大量的文件分成几个组分开去除页眉页脚。

主要还是win32com没搞明白,之后看一下,有时间优化一下,可以改成如果遇到限制编辑的文件就把这个文件放到一个专门的文件夹。

os.walk(path)

这里用的事遍历子文件夹实现的,这样就没办法给最上面的那个文件夹里的Word文档去除页眉页脚,虽然我用不上,但是如果需要的话可以用遍历文件的方式

path = 'C:\\Users\\马赛克\\Documents\\Python\\workspace\\PRA\\test'
for root,subFolders,fileNames in os.walk(path):
    for fileName in fileNames:
        if os.path.isfile(os.path.join(root, fileName)) and fileName.split('.')[-1].lower() in ['doc', 'docx']:
            print("去除"+os.path.join(root,fileName)+"的页眉页脚")

一些知识点

os.walk(path)

os.walk()循环时返回三个值

  1. 当前文件夹路径的字符串

  2. 当前文件夹子文件夹名的字符串列表

  3. 当前文件夹中文件名的字符串列表

注意: 当前文件夹是指for循环当前迭代的文件夹,程序的当前工作目录不会因为os.walk()而改变

os.walk() 方法可以创建一个生成器,用以生成所要查找的目录及其子目录下的所有文件。

os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下。

生成器可以理解为迭代器,迭代器是一个有记忆的东西,遍历过得东西他不会再。。。,就是说

os.listdir(path)

返回path目录下的所有文件名组成的列表

注意


dedup(删除原来的文件)

上面处理完的文件,经过Word转PDF,PDF去除密码,删除PDF页眉页脚后,新的PDF文件都是以Do_、Removed_作为文件名前缀,这里需要把原来的Word和PDF删除到。

逻辑

用os.walk()遍历所有文件,取出文件名切片判断有没有对应的前缀,如果没有就删除,如果有跳过

一些知识点

str.split()

切片后返回的是一个列表,如果没有切片的分隔符就直接返回整个str,这样就不能取列表的第[1]个(会越界),可以用最后一个[-1],python这个有倒序的真好用。

这里其实不用判断isfile(),因为前面循环的就是fileNames,这里直接复制的,当时没注意,现在发现了。

os.unlink()

os.unlink(path): 删除path处的文件。

os.rmdir(path): 删除path处的文件夹。该文件夹必须为空,其中没有任何文件和文件夹。

shutil.rmtree(path):删除 path 处的文件夹,它包含的所有文件和文件夹都会被删除。

注意:使用时,需要非常小心,避免删错文件,一般在第一次运行时,注释掉这些程序,并加上print()函数来帮助查看是否是想要删除的文件。

send2trash模块安全删除

shutil.rmtree(path)会不可恢复的删除文件和文件夹,用起来会有危险。因此使用第三方的send2trash模块,可以将文件或文件夹发送到计算机的垃圾箱或回收站,而不是永久删除。因程序缺陷而用send2trash 删除的某些你不想删除的东西,稍后可以从垃圾箱恢复。

注意:使用时,需要非常小心,避免删错文件,一般在第一次运行时,注释掉这些程序,并加上print()函数来帮助查看是否是想要删除的文件。

pip install send2trash       #安装send2trash模块

import send2trash
send2trash.send2trash('bacon.txt')

注意

这里用到了删除文件的os.unlink(),一定要注意先看一下有没有删对,或者是先用测试数据测试,不要直接在没有备份的数据上试,删错了找不回来


rename(重命名,删前缀)

一个批量重命名的小工具,用os.walk()遍历所有文件,把文件名切片,然后加上要删除或者增加的前缀

一些知识点

os.rename(path1,path2)

有两个参数,第一个参数是重命名的文件的路径,重命名后新的文件名和路径

注意

第一次重命名成功后如果再次执行,已经没有原来的分隔符,就会在原文件名前面加新东西,多次执行后文件名会变得很长,记得再次执行时复原原来的文件名


pack(文件打包)

逻辑

先用os.walk()遍历所有子文件夹,创建跟子文件夹名字相同的zip压缩包,然后遍历子文件夹里的文件,把所有文件添加到压缩包中

遇到的问题

ZipFile.write(_filename_, _arcname=None_, _compress_type=None_, _compresslevel=None_)

第一个参数是将要添加到压缩包中的文件的名字,第二个参数是添加到压缩包后的名字,默认是把文件的路径也连带进去的,也就是说,如果不写第二个参数,最后压缩包中并不是打开就是文件,而是这个文件原来的上级文件,一层一层到这个文件

一些知识点

zipfile库

zipfile.ZipFile(path+filename+'zip',)第二个参数可以是w新添加进去的文件会覆盖原来的文件,如果是a就不会。

.close()如果不关闭

os.walk()

os.walk()遍历的文件一直是当前目录中的文件,也就是说子文件夹中的文件是添加不到压缩包里的,如果想用直接遍历当前文件夹中的文件添加到压缩包,压缩包命名的时候就需要变成root+'.zip',下面的代码是原来的代码,下面的下面是新的代码,原来的代码是不能把根目录里的文件压缩的,现在可以了

path = ''
for root, subFolders,fileNames in os.walk(path):
    for subFolder in subFolders:
        newZip = zipfile.ZipFile(root+'\\'+subFolder+'.zip', 'a')
        print(os.path.join(root, subFolder))
        for root1 ,subFolders1 ,fileNames1 in os.walk(os.path.join(root,subFolder,)):
            for fileName1 in fileNames1:
        newZip.close()

path2 = 'C:\\Users\\马赛克\\Documents\\Python\\workspace\\PRA\\test'
for root2 ,subFolders2 ,fileNames2 in os.walk(path2):
    newZip2 = zipfile.ZipFile(root2+'.zip','a')
    for fileName2 in fileNames2:
        newZip2.write(os.path.join(root2,fileName2),fileName2)
    newZip2.close()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python高级编程是指在Python编程语言中使用更高级的技术和概念来解决复杂的问题。在Python中,高级编程可以包括使用类和对象、模块和包、异常处理、多线程和并发编程、网络编程、数据库操作、GUI编程等技术。 引用中提到了Python语言的一些基本知识,包括变量、数据类型、条件语句、循环和函数定义,这些是Python编程的基础部分。而在高级编程中,我们可以进一步探索更复杂的概念和技术,例如使用类和对象来创建面向对象的程序,使用模块和包来组织和管理代码,使用异常处理来处理程序中的错误,使用多线程和并发编程来实现并发执行,使用网络编程来实现网络通信,使用数据库操作来进行数据存储和检索,使用GUI编程来创建图形用户界面等。 引用提到了Python中的re模块,它提供了正则表达式模式的功能。正则表达式是一种强大的文本匹配和处理工具,可以用来查找、提取和替换特定模式的文本。在Python中,我们可以使用re模块的match和search函数来进行正则表达式的匹配和搜索操作,这在高级编程中经常被使用到。 引用提到了pip工具,它是Python包管理工具,可以用来查找、下载、安装和卸载Python包。Python包是一种用来扩展Python功能的模块集合,通过使用pip工具,我们可以方便地管理和使用这些包,这在高级编程中也是非常常见的操作。 综上所述,Python高级编程涉及到使用更高级的技术和概念来解决复杂的问题,包括类和对象、模块和包、异常处理、多线程和并发编程、网络编程、数据库操作、GUI编程等。同时,使用正则表达式和pip工具也是高级编程中常用的工具。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python自动化与脚本编程笔记1.md](https://download.csdn.net/download/weixin_52057528/88258597)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Python 高级编程](https://blog.csdn.net/Tianxing10/article/details/123086741)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值