python 无纸化办公_Python自动化办公(第1课)输出目录下所有文件及文件夹

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']

上面显示的是一个列表,即程序运行的文件夹下的所有文件:

c013935ad201766bb33c7d5bd082acb3.png

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

4154f69d9aa39202818dc4e52b00f21a.png

原因、解决办法

原因:当前目录与所遍历文件夹之间路径出现断裂,导致在判断时无法返回正确的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个

cb8d8a30f911bd6a331d6d19ce35b64d.png

原文链接:https://blog.csdn.net/lmt_fight/article/details/107700769

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值