目录
- 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(), "../..")))
参考:删除文件或文件夹