Python实用脚本实践

Python实用脚本实践

一、文件相关

查找文件

分类文件

根据后缀名将文件分类至不同文件夹

练习:
1. 把 jpg,png,gif 文件夹中的所有文件移动到 image 文件夹中,然后删除 jpg,png,gif 文件夹 
2. 把 doc,docx,md,ppt 文件夹中的所有文件移动到 document 文件夹中,然后删除

问题拆解提示:

如何实现文件归类可以拆解为以下4个子问题:
1. 如何创建目标文件夹?
2. 如何浏览各个文件夹?
3. 如何移动文件夹中的文件?
4. 如何删除文件夹?

问题解决提示:
1. 利用 os 模块中的 makedirs 函数,可以在指定路径创建文件夹。在本题中,可以先创建好 image 和 document 文件夹,在进行后续的处理。
2. os 模块中的 listdir 函数和 for 语句配合,可以完成浏览文件夹中所有文件的功能。在本题中需要注意的是,要浏览的文件夹有7个,所以先将这7个文件夹的名称存到了 list 变量中,便于使用。
3. shutil 模块中的 move 函数提供了移动文件的功能。需要指定文件所在路径和目标路径。
4. os 模块中的 removedirs 函数提供了删除文件夹的功能。

文件解压

面向过程编程思路

scan -- unzip -- delete

练习:

监测image文件夹,如果包含的文件大于等于5个,则将这些文件压缩到archive1.zip文件中,并删除这些文件。当再次监测到文件多于5个的时候,生成archive2.zip压缩包,以此类推。

问题解决提示
1. os库中的listdir函数可以获取一个文件夹中的所有文件名并存入list变量中,那么统计这个list变量中元素的个数,即可得到文件夹中的文件数。同时,利用whileTruetime.sleep()的配合,可以实现每隔一段时间执行一段代码的功能。
2. 利用shutil库中的make_archive函数来生成压缩包。
3. 利用 os 库中的remove函数来删除文件。因为要删除文件夹中的所有文件,所以配合listdir函数生成的files变量一起使用。

删除重复

删除重复的文件。包括不同文件夹内的重复文件。 

问题拆解提示

如何删除重复文件可以拆解为以下4个子问题:
1. 如何将所有文件都存放到一个list变量中?
2. 如何判断两个文件的内容是否一致?
3. 如何判断在很多文件中找到一对重复的文件?
4. 如何删除文件?

问题解决提示
1. 假设我们的文件夹只有一层,没有嵌套的文件夹,那么,利用os模块中的listdir函数和for循环配合,就可以浏览所有文件。在浏览文件的同时,记录下每个文件的路径,并存储到list变量中,我们就得到了所有文件的集合。
2. 利用filecmp模块中的cmp函数,判断两个文件的内容是否一致。如果一致,函数返回True;如果不一致,函数返回False。
3. 对一个list变量,使用双重for循环,可以对list中的元素进行两两对比。第一层循环相当于从list中取出一个元素x,第二层循环相当于取出list中的另一个元素y,比较所有的x和y,即实现了对list中所有元素的两两对比。
4. 利用os模块中的remove函数,可以删除指定位置的文件。

二、微信相关

定制群发消息

将下面的表格内容群发至对应的人。

用到第三方库wxpy

过程:实例化对象 -> 找到好友 -> 发消息

  1. 利用Python内置的csv库,通过调用csv.DictReader()函数,读取并解析csv文件。
    小技巧:利用列表解析式生成list,list中的每一个元素代表了csv文件中的一行。
  2. 利用内置的format()函数,根据文字模板和指定内容,生成对应的信息。
  3. 利用wxpy库,查找好友并发送信息。
    // bot -> bot.find_fren() -> bot.send()

// f = bot.friend().search('name')

// f.send('msg')

练习

现在要给王总、麻瓜编程君、沫沫、侯爵这4个人发送不同的邀请信息,销售给了你一份 csv 名单,但名单里人是不全的,只有其中3个人。 

请实现使用 wxpy 库群发信息,并且考虑这种情况:当 csv 名单里缺失了我要发送的人,程序要如何处理这种情况。 

自动拉微信


建议使用小号建群,运行代码时用小号扫码登录,避免大号被封。

运行代码之前需要先建好群,修改群名称和代码中一致,至少在群里说一句话,然后用大号加小号管理员即可自动入群

加好友的时候用一个try catch捕获异常,多用sleep防止微信号被封

进群退群的统计日志

使用 wxpy 文档中「看用户是否在群中」的功能
http://wxpy.readthedocs.io/zh/latest/chats.html#id8

实现机器人群主的监测:每小时看谁进群了了,谁退群了,发送统计日志给自己的微信号。

  1. 查看wxpy库的文档,发现获取群聊的方法——bot.groups().search("群聊名"),发现获取群聊成员列表的方法——group.members()。
  2. 通过对比新旧成员列表,来发现退群名单和进群名单。退群名单:如果旧成员不在新的成员列表中,说明他退群了;进群名单:如果新成员不在旧的成员列表中,说明他是新加群的。
  3. 利用前面提到的send函数来给自己发日志。