【python】关于文件夹的一些操作

1 判断文件夹或文件是否存在?如果不存在就创建

import os
file_or_dir = 'C:\\Users\\54719\\Desktop'  # 文件路径
if os.path.exists(file_or_dir):  # 如果文件存在
	print("文件夹或文件存在")
else:
	print("文件夹或文件不存在,创建了一个文件夹")
	os.makedirs(file_or_dir)

但是推荐这种方法

还有种更方便的方法,实现:创建文件夹,如果文件夹存在,就不再创建,这样就可以避免报错文件夹已存在:

data_root = './Data/'
os.makedirs(data_root, exist_ok=True) 

2 遍历某路径下的所有文件

2.1 os.walk()

os.walk(top, topdown=True, οnerrοr=None, followlinks=False),通过“自上而下”或“自下而上”来遍历目录,生成目录树中的文件夹名和文件名。结果是按照广度优先返回的,有三个结果,分布是文件夹路径、文件夹名称和文件名。

import os

# 遍历文件夹
def walkFile(file):
	#os.walk(file)返回的是一个迭代器<generator object walk at 0x0000026521C93970>,通过for循环来访问每一次迭代得到的结果
    for root, dirs, files in os.walk(file):

        # root 表示当前正在访问的文件夹路径
        # dirs 表示该文件夹下的子目录名list
        # files 表示该文件夹下的文件list 注意返回的是文件名

        # 遍历文件
        for f in files:
            print(os.path.join(root, f))

        # 遍历所有的文件夹
        for d in dirs:
            print(os.path.join(root, d))


def main():
    walkFile("f:/ostest/")

if __name__ == '__main__':
    main()

2.2 os.scandir()

os.scandir(path),返回path目录树中对应的os.DirEntry对象的迭代器(文件夹或文件),不包含子文件夹里的文件夹和文件,但运行效率比os.walk高,Python官方推荐使用os.scandir来遍历目录树。

path = "./"
dirs = []
files = []
for item in os.scandir(path):
    if item.is_dir():
      dirs.append(item.path)
	  #dirs.append(item.name)
    elif item.is_file():
      files.append(item.path)
      #dirs.append(item.name)

print("目录地址:", dirs)
print("文件地址:", files)

out:

目录地址: ['./.spyproject', './2020-12-05-23-19-20', './2020-12-06-17-05-49', './2020-12-06-17-31-40', './data', './helpers']
文件地址: ['./draft.py', './load_and_split.py', './main.py', './main_CIFAR.py', './__Init__.py']

当然,也可以通过 item.name 得到文件或文件夹的名字。

2.3 遍历某路径下所有文件

import os
os.listdir() # 这种方法可以返回每一个文件和文件夹,可以用于遍历

3 判断某一文件夹是否为空?

os.listdir(path),返回path目录下的文件夹和文件,但不包含子文件夹里的文件夹和文件,并按照目录树结构的排序输出结果,即深度优先

if not os.listdir(dir):
	print(dir + "该文件夹为空")

4 查找某一目录下的空文件夹

dir = "C:\\Users\\54719\\Desktop\\A metric for MI\\project\\"
dir_iter = os.walk(dir)
root, dirs, files = next(dir_iter)

for dir in dirs:
    if not os.listdir(root + dir):
        print(root + dir + "是一个空文件夹")

out:

C:\Users\54719\Desktop\A metric for MI\project\2020-12-05-17-40-57是一个空文件夹
C:\Users\54719\Desktop\A metric for MI\project\2020-12-05-18-12-55是一个空文件夹
C:\Users\54719\Desktop\A metric for MI\project\2020-12-05-18-14-09是一个空文件夹
C:\Users\54719\Desktop\A metric for MI\project\2020-12-05-18-14-54是一个空文件夹
C:\Users\54719\Desktop\A metric for MI\project\2020-12-05-22-51-23是一个空文件夹
C:\Users\54719\Desktop\A metric for MI\project\2020-12-05-22-51-42是一个空文件夹
C:\Users\54719\Desktop\A metric for MI\project\2020-12-05-22-52-18是一个空文件夹
C:\Users\54719\Desktop\A metric for MI\project\2020-12-05-22-59-11是一个空文件夹
C:\Users\54719\Desktop\A metric for MI\project\2020-12-05-23-07-52是一个空文件夹
C:\Users\54719\Desktop\A metric for MI\project\2020-12-05-23-11-05是一个空文件夹
C:\Users\54719\Desktop\A metric for MI\project\2020-12-05-23-16-02是一个空文件夹
C:\Users\54719\Desktop\A metric for MI\project\2020-12-05-23-18-04是一个空文件夹
C:\Users\54719\Desktop\A metric for MI\project\2020-12-05-23-18-39是一个空文件夹
C:\Users\54719\Desktop\A metric for MI\project\2020-12-06-16-51-31是一个空文件夹
C:\Users\54719\Desktop\A metric for MI\project\2020-12-06-16-52-39是一个空文件夹
C:\Users\54719\Desktop\A metric for MI\project\2020-12-06-16-53-08是一个空文件夹
C:\Users\54719\Desktop\A metric for MI\project\2020-12-06-16-53-51是一个空文件夹

5 删除文件或文件夹

需要用到不同的函数,其中,删除文件用:

import os
os.remove(path)

删除文件夹用:

os.rmdir(path)  

注意:os.rmdir()只能删除空文件夹,即要先把文件夹内的文件用os.remove()删光,才能删除文件夹。

6 返回(上级)目录

import os

print '***获取当前目录***'
print(os.getcwd())
print(os.path.abspath(os.path.dirname(__file__)))

print '***获取上级目录***'
print(os.path.abspath(os.path.dirname(os.path.dirname(__file__))))
print(os.path.abspath(os.path.dirname(os.getcwd())))
print(os.path.abspath(os.path.join(os.getcwd(), "..")))

print '***获取上上级目录***'
print(os.path.abspath(os.path.join(os.getcwd(), "../..")))

参考:删除文件或文件夹

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学渣渣渣渣渣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值