python重复操作 自动化办公_Python 自动化办公之"你还在手动操作“文件”或“文件夹”吗?"...

点击关注上方“杰哥的IT之旅”,

设为“置顶或星标”,第一时间送达干货。

投稿作者:Huang supreme

编辑整理:JackTian

微信公众号:杰哥的IT之旅(ID:Jake_Internet)

投稿作者文章导读:

1、“罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?

2、利用 Python 进行多 Sheet 表合并、多工作簿合并、一表按列拆分

1、输出目录下所有文件及文件夹

1)os.getcwd():获取当前python程序的运行路径

import os

os.getcwd()

结果如下:

2)路径中斜杠(/)和反斜杠()的说明

3)os.path.join():自动连接路径(不同的操作系统,连接符不同)

os.path.join("My Project","Demo")

"C:\\" + os.path.join("My Project","Demo")

结果如下:

4)绝对路径和相对路径

5)os.listdir()与os.isdir()

os.listdir():列出当前程序文件夹下的所有文件和文件夹;

os.scandir():os.listdir()的一种更好的替代方法,返回的是一个迭代器。注意:我们可以采用循环迭代其中的每一个元素,os.scandir()有两个特殊的属性和一个方法,我们在下面的例子中,进行演示。

os.listdir()

os.scandir()

for item in os.scandir():

print(item.name,item.is_dir(),"\n\t",item.path)

结果如下:

其实,os.listdir()或者os.scandir()其实可以传入一个路径,然后获取指定路径下的文件或者文件夹。

os.listdir("G:\\6Tipdm\\Python集训营_情感分析")

for item in os.scandir("G:\\6Tipdm\\Python集训营_情感分析"):

print(item.name,item.is_dir(),"\n")

结果如下:

2、遍历、搜索文件及查询文件信息

1)找出文件夹里的文件夹里的“文件”或“文件夹”

① os.walk(路径):传入一个路径,帮助我们将文件夹里的文件夹里的文件夹里的文件都找出来。

for dirpath, dirnames, files in os.walk("./"):

print(f"发现文件夹\t{dirpath}")

print(files)

-----------------------------------------------

for dirpath, dirnames, files in os.walk("./"):

print(f"发现文件夹\t{dirpath}")

print(dirnames)

"""

dirpath是文件夹路径

dirnames是dirpath这个文件夹下的子文件夹列表

files是dirpath这个文件夹里的文件列表

"""

结果如下:

2)搜索、匹配文件名称及文件信息查看

① 方法一:startswith()和endswith()

字符串A.startswith(字符串B):字符串A是否以字符串B开头;

字符串A.endswith(字符串B):字符串A是否以字符串B结尾;

"abc.txt".startswith("abc")

"abc.txt".endswith(".txt")

------------------------------------------------------

list1 = ["a.txt", "b.py", "c.xlsx", "d.txt", "e.txt"]

for item in list1:

if item.endswith(".txt"):

print(item)

结果如下:

② 方法二:glob模块

该模块可以采取类似于“正则”的方式,进行文件匹配,用起来很方便。

代码如下:

for i in glob.glob("*.txt"):

print(i)

---------------------------

for i in glob.glob("a*.txt"):

print(i)

---------------------------

for i in glob.glob("a?.txt"):

print(i)

---------------------------

for i in glob.glob("a??.txt"):

print(i)

结果如下:

特别的:glob()方法中还有一个参数recursive = True,能够将所有深层文件夹里面,符合条件的文件给你找出来。

# 注意:一个*和两个*的区别

glob.glob("*/*.txt",recursive=True)

glob.glob("**/*.txt",recursive=True)

结果如下:

③ os.scandir()返回的文件都可以利用stat()方法,进行查看

代码如下:

for file in os.scandir():

print(file.name, file.stat(), "\n")

结果如下:

接着,我们获取上述几个常用属性看看。

import time

for file in os.scandir():

print(file.name, file.stat().st_size, time.ctime(file.stat().st_ctime), "\n")

结果如下:

3、批量创建、复制、移动、删除、重命名文件及文件夹

1)创建文件夹

os.mkdir("新文件夹名称"):创建单层文件夹;

os.makedirs("第一层/第二层/第三层"):创建多层文件夹;

list1 = ["文件夹{}".format(i) for i in range(5)]

for i in list1:

os.mkdir(i)

结果如下:

问题:当某个文件夹已经存在的时候,运行此代码,会报错。此时可以添加一个判断条件

(os.path.exists("新文件夹名称"))。

if not os.path.exists("傻逼"):

os.mkdir("傻逼")

结果如下:

2)复制文件及文件夹(shutil模块儿)

shutil.copy("要复制的文件", "要复制到的位置"):复制文件;

shutil.copytree("要复制的文件夹", "要复制到的新文件夹的位置"):复制文件夹;

① 复制文件

shutil.copy("要复制的文件", "要复制到的位置");

操作如下:

import shutil

# 将aba.txt复制一份到project文件夹中。

shutil.copy("aba.txt", "./project")

# 将aba.txt复制一份到project文件夹中,并重新命名为“新名字.txt”。

shutil.copy("aba.txt", "./project/新名字.txt")

结果如下:

② 复制文件夹:相当于重命名文件夹

shutil.copytree("要复制的文件夹", "要复制到的新文件夹的位置");

注意:将某个文件夹移动到另外一个文件夹(该文件夹必须是新文件夹),不能是已经存在了的文件夹;

操作如下:

import shutil

shutil.copytree("project", "./qq")

结果如下:

3)移动文件或文件夹

shutil.move("要移动的文件或文件夹","要移动到的位置"):移动文件/文件夹;

文件夹或者文件被移动后,原始文件就没有了;

① 移动文件

shutil.move("要移动的文件","要移动到的位置")

操作如下:

import shutil

# 将aba.txt移动到“傻逼”文件夹下

shutil.move("aba.txt","./傻逼/")

# # 将test.txt移动到“傻逼”文件夹下,并重新命名为test1.txt

shutil.move("test.txt","./傻逼/test1.txt")

结果如下:

② 移动文件夹

shutil.move("要移动的文件夹","要移动到的位置")

操作如下:

import shutil

# 将“第一层”文件夹移动到“傻逼”文件夹下

shutil.move("第一层","./傻逼/")

# 将“qq”文件夹移动到“傻逼”文件夹下,并重新命名为“哈哈”文件夹

shutil.move("qq","./傻逼/哈哈")

结果如下:

4)重命名文件或文件夹

os.rename("文件/文件夹","新文件名/新文件夹名")

操作如下:

import os

# 将test1.xlsx重命名为“my.xlsx”

os.rename("test1.xlsx","my.xlsx")

# 将“傻逼”文件夹重命名为“傻子”文件夹

os.rename("傻逼","傻子")

结果如下:

5)删除文件或文件夹

① 删除文件

os.remove("要删除的文件")

注意:这里说的只是删除文件,而不能是文件夹;

操作如下:

import os

# 删除“my.xlsx”文件

os.remove("my.xlsx")

结果如下:

② 删除文件夹

shutil.rmtree("要删除的文件夹")

操作如下:

import shutil

# 删除“文件夹0”这个文件夹

shutil.rmtree("文件夹0")

结果如下:

4、创建和解压压缩包

注意:这里所说的压缩包,指的是“.zip”格式的压缩包;

1)读取压缩包里的文件

import zipfile

with zipfile.ZipFile("python办公自动化.zip", "r") as zipobj:

print(zipobj.namelist())

-----------------------------------------------------------

# 注意:有时候需要写成filename.encode("cp437").decode("gbk")

with zipfile.ZipFile("python办公自动化.zip", "r") as zipobj:

for filename in zipobj.namelist():

print(filename.encode("gbk").decode("gbk"))

结果如下:

2)读取压缩包里面的文件信息

import zipfile

with zipfile.ZipFile(r"G:\tableau书籍\Tableau文件.zip", "r") as zipobj:

for filename in zipobj.namelist():

info = zipobj.getinfo(filename)

new_filename = filename.encode("cp437").decode("gbk")

print(new_filename, info.file_size/1024/1024, info.compress_size/1024/1024)

结果如下:

3)解压压缩包

extract("压缩包内要解压的文件名","解压到哪个位置"):将压缩包内单个文件解压出来;

extractall("解压到哪个位置"):将压缩包内所有文件解压出来;

① 解压单个文件

extract("压缩包内要解压的文件名","解压到哪个位置")

import zipfile

# 将该压缩包中的“a.txt”文件,单独解压到“傻子”文件夹下

with zipfile.ZipFile(r"G:\6Tipdm\7python办公自动化\python办公自动化.zip", "r") as zipobj:

zipobj.extract("a.txt","./傻子/")

结果如下:

② 解压整个文件

extractall("解压到哪个位置")

import zipfile

# 将该压缩包整个解压到“文件夹1”文件夹下

with zipfile.ZipFile(r"G:\6Tipdm\7python办公自动化\python办公自动化.zip", "r") as zipobj:

zipobj.extractall("./文件夹1/")

结果如下:

注意:如果你的压缩包中“有密码”,则采用以下方式进行解压。

4)创建压缩包

① 对某些文件,创建压缩包

file_list = ["a.txt", "aa.txt", "文件夹1"]

# 将上述三个文件,进行打包,使用“w”

with zipfile.ZipFile(r"我创建的压缩包.zip", "w") as zipobj:

for file in file_list:

zipobj.write(file)

结果如下:

② 压缩包已经存在,往其中添加文件

# 往上述压缩包中,再次添加一个新文件“傻子”文件夹,使用“a”

with zipfile.ZipFile(r"我创建的压缩包.zip", "a") as zipobj:

for file in file_list:

zipobj.write("傻子")

结果如下:

扫描下方二维码即可跳转至投稿作者博客

end

本公众号全部博文已整理成一个目录,请在公众号后台回复「m」获取!

推荐阅读:

1、“罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?

2、利用 Python 进行多 Sheet 表合并、多工作簿合并、一表按列拆分

3、太牛逼了,Markdown 几行字符就可以生成思维导图了!

4、一款霸榜 GitHub 的开源 Linux 资源监视器!

5、不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏…

6、Nginx系列教程(六)| 手把手教你搭建 LNMP 架构并部署天空网络电影系统

7、Nginx系列教程(五)| 利用 Nginx+Keepalived 实现高可用技术

关注微信公众号『杰哥的IT之旅』,后台回复“1024”查看更多内容,回复“微信”添加我微信。

好文和朋友一起看~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值