目录

  • 1 判断文件夹或文件是否存在?如果不存在就创建
  • 但是推荐这种方法
  • 2 遍历某路径下的所有文件
  • 2.1 os.walk()
  • 2.2 os.scandir()
  • 2.3 遍历某路径下所有文件
  • 3 判断某一文件夹是否为空?
  • 4 查找某一目录下的空文件夹
  • 5 删除文件或文件夹
  • 6 返回(上级)目录


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(), "../..")))

参考:删除文件或文件夹