极简Python语法(10)

12.2 目录操作

  Python中,并没有提供直接操作目录的函数或者对象,而是需要使用内置的osos.path模块实现。常用的目录操作主要有判断目录是否存在、创建目录、删除目录和遍历目录等,均是在windows系统下进行。

12.2.1 os和os.path模块

  在Python中,内置了os模块及其子模块os.path用于对目录或文件进行操作。首先需要使用import导入。

import os
print(os.name)
'''
nt
'''

  上述代码输出为nt说明在windows系统下。

  在Windows操作系统下输出os.linesep,用于获取当前操作系统上的换行符:

>>> import os
>>> os.linesep
'\r\n'

  sep:用于获取当前操作系统所使用的路径分隔符。

>>> import os
>>> os.sep
'\\'

  os模块中提供的与其目录相关的函数:

极简Python语法(10)_第1张图片

  os.path模块也提供了一些操作目录的函数:

极简Python语法(10)_第2张图片

12.2.2 路径

  用于定位一个文件或者目录的字符串被称为一个路径。在程序开发时,通常会涉及两种路径,一种是相对路径,另一种是绝对路径。

1. 相对路径

  在Python中,可以通过os模块提供的getcwd()函数获取当前工作目录。相对路径就是依赖于当前工作目录的。如果在当前工作目录下有一个名称为message.txt的文件,那么在打开这个文件时,就可以直接写上文件名,这时采用的就是相对路径。

import os
print(os.getcwd())
'''
C:\Users\包文强\Desktop\python练习\文件
'''

2. 绝对路径

  绝对路径是指在使用文件时指定文件的实际路径。它不依赖于当前工作目录。在Python中,可以通过os.path模块提供的abspath()函数获取一个文件的绝对路径。

import os
print(os.getcwd())
print(os.path.abspath('message.txt'))
'''
C:\Users\包文强\Desktop\python练习\文件
C:\Users\包文强\Desktop\python练习\文件\message.txt
'''

3.拼接路径

  如果想要将两个或者多个路径拼接到一起组成一个新的路径,可以使用os.path模块提供的join()函数实现。

import os
print(os.path.join("C:\\Users\\包文强\\Desktop\\python练习\\文件",
                   "bmi.py"))
'''
C:\Users\包文强\Desktop\python练习\文件\bmi.py
'''

  使用os.path.join()函数拼接路径时,并不会检测路径是否是真的存在。

12.2.3 判断目录是否存在

  使用os.path模块提供的exists()函数可以判断给定的怒目是否存在。

import os
print(os.path.exists("C:\\Users\包文强\Desktop\python练习\文件\bmi.py"))
'''
False
'''

import os
print(os.path.exists("C:\\Users\包文强\Desktop\python练习\文件\message.txt"))
'''
True
'''

12.2.4 创建目录

  os模块提供了两个创建目录的函数,一个用于创建一级目录,另一个用于创建多级目录。

1. 创建一级目录

  创建一级目录是指一次只能创建一级目录。可以使用os模块提供的mkdir()函数实现。通过该函数只能创建指定路径中的最后一级目录,如果该目录的上一级不存在,则抛出FileNotFoundError异常。

import os
path = "C:\\demo"
if not os.path.exists(path):
    os.mkdir(path)
    print("目录创建成功!")
else:
    print("该目录已经存在了!")
'''
目录创建成功!
'''

  由下图可以看到,目录下的文件夹,已经创建成功。若再次执行上述代码,则显示目录已经存在了。
极简Python语法(10)_第3张图片

2.创建多级目录

  使用os模块提供的makedirs()函数,该函数用于采用递归的方式创建目录。

import os
os.makedirs("C:\\demo\\test\\dir\\mr")

'''
C:\demo\test\dir\mr
'''

  多级路径已经建好。

12.2.5 删除目录

  删除目录可以使用os模块提供的rmdir()函数实现。

import os
os.rmdir("C:\\demo\\test\\dir\\mr")

  执行上面的代码后,将删除C:\demo\test\dir目录下的mr目录。如果删除不存在的目录,则会报错,所以可以实现用条件语句进行判断。

import os
path = "C:\\demo\\test\\dir\\mr"
if os.path.exists(path):
    os.rmdir(path)
    print("目录删除成功!")
else:
    print("该目录不存在!")
'''
该目录不存在!
'''

  使用rmdir()只能删除空的目录,如果想要删除空的目录,使用Python内置的标准模块中的shutilrmtree()函数。

12.2.6 遍历目录

  在Python中,os模块的walk()函数用于实现遍历目录的功能。

import os
tuples = os.walk("C:\\Users\包文强\Desktop\python练习\文件")
for tuple in tuples:
    print(tuple, '\n')
'''
('C:\\Users\\包文强\\Desktop\\python练习\\文件', [], ['antmanor_message.py', 'bjut.jpg', 'directory.py', 'message.txt']) 
'''

  函数返回值:返回一个包括3个元素(dirpath,dirnames, filenames)的元组生成器对象。其中,dirpath表示当前遍历的路径,是一个字符串;dirnames表示当前路径下包含的子目录,是一个列表;filenames表示当前路径下包含的文件,也是一个列表。

import os
path = 'C:\\Users\包文强\Desktop\别拿蹦迪开玩笑'
print('【', path, '】 目录下的文件:')
for root, dirs, files in os.walk(path, topdown=True):#表示自上而下遍历,true,自下而上 false
    for name in dirs:
        print('子目录:', os.path.join(root, name))
    for name in files:
        print('文件:', os.path.join(root, name))
'''
【 C:\Users\包文强\Desktop\别拿蹦迪开玩笑 】 目录下的文件:
子目录: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\.idea
子目录: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\__MACOSX
子目录: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\别拿蹦迪开玩笑
子目录: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\.idea\inspectionProfiles
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\.idea\misc.xml
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\.idea\modules.xml
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\.idea\workspace.xml
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\.idea\别拿蹦迪开玩笑.iml
子目录: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\__MACOSX\别拿蹦迪开玩笑
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\__MACOSX\别拿蹦迪开玩笑\._.DS_Store
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\__MACOSX\别拿蹦迪开玩笑\._data_loader.py
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\__MACOSX\别拿蹦迪开玩笑\._readme.txt
子目录: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\别拿蹦迪开玩笑\.ipynb_checkpoints
子目录: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\别拿蹦迪开玩笑\input
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\别拿蹦迪开玩笑\.DS_Store
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\别拿蹦迪开玩笑\data_loader.py
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\别拿蹦迪开玩笑\main.ipynb
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\别拿蹦迪开玩笑\readme.txt
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\别拿蹦迪开玩笑\result_G.csv
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\别拿蹦迪开玩笑\.ipynb_checkpoints\main-checkpoint.ipynb
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\别拿蹦迪开玩笑\input\test.h5
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\别拿蹦迪开玩笑\input\testB.h5
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\别拿蹦迪开玩笑\input\train.h5
'''

  再次遍历一遍该目录:

import os
path = 'C:\\Users\包文强\Desktop\别拿蹦迪开玩笑'
print('【', path, '】 目录下的文件:')
p = os.walk(path)
for i in p:
    print(i,'\n')
'''
【 C:\Users\包文强\Desktop\别拿蹦迪开玩笑 】 目录下的文件:
('C:\\Users\\包文强\\Desktop\\别拿蹦迪开玩笑', ['.idea', '__MACOSX', '别拿蹦迪开玩笑'], []) 

('C:\\Users\\包文强\\Desktop\\别拿蹦迪开玩笑\\.idea', ['inspectionProfiles'], ['misc.xml', 'modules.xml', 'workspace.xml', '别拿蹦迪开玩笑.iml']) 

('C:\\Users\\包文强\\Desktop\\别拿蹦迪开玩笑\\.idea\\inspectionProfiles', [], []) 

('C:\\Users\\包文强\\Desktop\\别拿蹦迪开玩笑\\__MACOSX', ['别拿蹦迪开玩笑'], []) 

('C:\\Users\\包文强\\Desktop\\别拿蹦迪开玩笑\\__MACOSX\\别拿蹦迪开玩笑', [], ['._.DS_Store', '._data_loader.py', '._readme.txt']) 

('C:\\Users\\包文强\\Desktop\\别拿蹦迪开玩笑\\别拿蹦迪开玩笑', ['.ipynb_checkpoints', 'input'], ['.DS_Store', 'data_loader.py', 'main.ipynb', 'readme.txt', 'result_G.csv']) 

('C:\\Users\\包文强\\Desktop\\别拿蹦迪开玩笑\\别拿蹦迪开玩笑\\.ipynb_checkpoints', [], ['main-checkpoint.ipynb']) 

('C:\\Users\\包文强\\Desktop\\别拿蹦迪开玩笑\\别拿蹦迪开玩笑\\input', [], ['test.h5', 'testB.h5', 'train.h5']) 

'''

你可能感兴趣的:(Python)