Python自动化办公(第1课)输出目录下所有文件及文件夹
- 使用os.getcwd()函数获取当前路径
import os
print(os.getcwd())
C:\Users\lenovo\Documents\Jupyter Notebook\Python—自动化办公
windows中用反斜杠(\)作为文件分隔符
mac和linux中用斜杠(/)作为分隔符
倘若有的文件实在win或mac下运行的那怎么在代码里面写文件的路径呢?
os.path.join(第一个,第二个,第三个,…)
将文件夹名在括号里面按顺序填就好
print(os.path.join(“Myprojects”,“AI”)) 意思就是Myproject文件夹下面的AI文件
绝对路径:从根目录开始
相对路径:相对于程序当前运行目录
比如程序运行在E:\pythonProject\文件夹下
这个文件夹里还有一个交 practice1的文件夹
那么practice1文件夹的相对路径是.\practice1
- 使用os.listdir()查看该文件夹下的所有文件
import os
print(os.listdir())
['.ipynb_checkpoints', 'Untitled.ipynb']
上面显示的是一个列表,即程序运行的文件夹下的所有文件:
for item in os.listdir():
print(item)
.ipynb_checkpoints
Untitled.ipynb
也可以在括号内写指定路径,单斜杠双斜杠都可以。如下:
print(os.listdir("D:\迅雷下载\星际迷航"))
['星际迷航.皮卡德.S01E03.mp4', '星际迷航皮卡德.S01E02.mp4', '星际迷航:皮卡德.S01E01.mp4', '星际迷航:皮卡德.S01E04.mp4', '星际迷航:皮卡德.S01E06.mp4', '星际迷航:皮卡德.S01E07.mp4']
print(os.listdir("D:\\迅雷下载\\星际迷航"))
['星际迷航.皮卡德.S01E03.mp4', '星际迷航皮卡德.S01E02.mp4', '星际迷航:皮卡德.S01E01.mp4', '星际迷航:皮卡德.S01E04.mp4', '星际迷航:皮卡德.S01E06.mp4', '星际迷航:皮卡德.S01E07.mp4']
- 使用os.path.isdir()查看是否是文件夹(文件夹返回true,否则返回false)
files=os.listdir("D:\重要文件")
for file in files:
print(file,os.path.isdir(file))
C盘转移照片 False
二级C无纸化考试模拟软件.zip False
奖状视频.mp4 False
实验五.rar False
新建文本文档.txt False
桌面文件 False
迅雷下载 False
迅雷下载1 False
可见该方法返回的全是false
原因、解决办法
原因:当前目录与所遍历文件夹之间路径出现断裂,导致在判断时无法返回正确的st_mode
解决办法:使用os.path.join()函数将路径拼接起来
files=os.listdir("D:\重要文件")
for file in files:
file=os.path.join("D:\重要文件",file)
print(file,os.path.isdir(file))
D:\重要文件\C盘转移照片 True
D:\重要文件\二级C无纸化考试模拟软件.zip False
D:\重要文件\奖状视频.mp4 False
D:\重要文件\实验五.rar False
D:\重要文件\新建文本文档.txt False
D:\重要文件\桌面文件 True
D:\重要文件\迅雷下载 True
D:\重要文件\迅雷下载1 True
- 使用os.path.join()方法将路径拼接起来
如果各组件名首字母不含有“/”,则函数会自动添加
如果有一个组件是绝对路径,则在他之前的所有组件均会被丢弃
path1="home"
path2="develop"
path3="code"
path4=path1+path2+path3
path5=os.path.join(path1,path2,path3)
print("path4=",path4)
print("path5=",path5)
path4= homedevelopcode
path5= home\develop\code
path1="/home"
path2="develop"
path3="code"
path4=path1+path2+path3
path5=os.path.join(path1,path2,path3)
print("path4=",path4)
print("path5=",path5)
path4= /homedevelopcode
path5= /home\develop\code
path1="home"
path2="/develop"
path3="code"
path4=path1+path2+path3
path5=os.path.join(path1,path2,path3)
print("path4=",path4)
print("path5=",path5)
path4= home/developcode
path5= /develop\code
path1="home"
path2="develop"
path3="/code"
path4=path1+path2+path3
path5=os.path.join(path1,path2,path3)
print("path4=",path4)
print("path5=",path5)
path4= homedevelop/code
path5= /code
- 推荐使用os.scandir()方法访问文件【目录迭代方法】
该方法直接print()会返回一个DirEntry迭代器对象,初学者可用for循环来遍历
迭代器:如果文件夹下有成千上万个文件,那么使用os.path.isdir()运行速度会非常缓慢。每次调用该对象时会返回自身的下一个元素
迭代器优点:节约内存(循环过程中,数据不用一次读入,在处理文件对象时特别有用,因为文件也是迭代器对象)、不依赖索引取值、实现惰性计算(需要时再取值计算)
os.scandir()函数有如下属性和方法:
name:条目文件名
path:条目路径
is_dir():返回是否为文件夹的布尔值(是文件夹返回true,负责返回false)
is_file():返回是否为文件的布尔值(是文件返回true,否则返回false)
for file in os.scandir("D:\重要文件"):
print(file.name, file.path, file.is_dir(),file.is_file())
C盘转移照片 D:\重要文件\C盘转移照片 True False
二级C无纸化考试模拟软件.zip D:\重要文件\二级C无纸化考试模拟软件.zip False True
奖状视频.mp4 D:\重要文件\奖状视频.mp4 False True
实验五.rar D:\重要文件\实验五.rar False True
新建文本文档.txt D:\重要文件\新建文本文档.txt False True
桌面文件 D:\重要文件\桌面文件 True False
迅雷下载 D:\重要文件\迅雷下载 True False
迅雷下载1 D:\重要文件\迅雷下载1 True False
作业:编写python程序,要求如下
找出当前目录下所有非文件夹的文件
统计其中包含有“python”单词的文件数量
输出文件数量
import os
n=0
for file in os.scandir("D:\Apython\代码文件\自动化办公\python自动化办公第一次作业"):
if file.is_dir()==False:
print(file)
if "python" in file.name:
n+=1
print("文件夹中包含python的非文件夹有{}个".format(n))
文件夹中包含python的非文件夹有3个
原文链接:https://blog.csdn.net/lmt_fight/article/details/107700769