python中关于文件和目录的操作,经常应用OS模块。import os:

  一、关于路径、文件名

  (一)获取当前运行文件的路径、文件名

   1、__file__   直接获取当前运行文件的:绝对路径+文件名

   ‘__file__’ 是一个str,不是函数,不能' __file__()'使用,会报错。

filename = __file__  # __file__是一个str,并非方法
print(filename)  # D:/pycharm/dongxuew/hello_world.py
View Code

  2、os.getcwdb() 和 os.getcwd() 直接获取当前工作目录绝对路径  

  仅获取当前工作目录的路径,不含文件名。getcwdb()返回bytes;getcwd()返回str。

# 得到当前工作目录的路径
print(os.getcwd())  # D:\pycharm\dongxuew
print(os.getcwdb())  # b'D:\\pycharm\\dongxuew'
View Code

  (二)获取指定文件file的路径、文件名

  1、os.path.dirname(file)  获取指定file的路径,不含文件名

  2、os.path.filename(file)  获取指定file的文件名,不含路径

  3、os.path.split(file) 获取指定file文件的路径和文件名,以元组形式返回

import os
filename = __file__  # 可以指定当前文件,也可以指定任意完整路径文件
current_dirname = os.path.dirname(filename)  # 路径名,不含文件名
current_filename = os.path.basename(filename)  # 文件名,不含路径
path_file = os.path.split((filename))   # (路径名,文件名)
print(current_dirname)  # D:/pycharm/dongxuew
print(current_filename)  # hello_world.py
print(path_file)        # ('D:/pycharm/dongxuew', 'hello_world.py')
View Code

  (三)有关路径、文件名的各种判断

  1、os.path.exists()  判断路径或文件是否存在

  文件或路径,存在返回True,不存在返回False。

# 判断路径是否存在
print(os.path.exists('.\\'))  # True
print(os.path.exists('..\\'))  # True
print(os.path.exists('...\\'))  # False
print(os.path.exists('D:/pycharm/dongxuew'))  # True
print(os.path.exists('D:/pycharm/lucy'))  # False
print(os.path.exists('D:/pycharm/dongxuew/hello_world.py'))  # True
View Code

  2、os.path.isabs()  判断是否使用绝对路径

  使用绝对路径返回True,相对路径返回False。

# 判断是否绝对路径
print(os.path.isabs('D:/pycharm/dongxuew/hello_world.py')) # True
print(os.path.isabs('.\\')) # False
print(os.path.isabs('D:/pycharm/dongxuew')) # True
View Code

  3、判断是路径还是文件

  os.path.isdir()判断是否是目录;os.path.isfile()判断是否是文件。都返回布尔值。

print(os.path.isdir('D:/pycharm/dongxuew/hello_world.py')) # False
print(os.path.isdir('D:/pycharm/dongxuew'))      # True
print(os.path.isfile('D:/pycharm/dongxuew/hello_world.py')) # True
print(os.path.isfile('D:/pycharm/dongxuew')) # False
View Code

  二、 os.listdir(dir)  获取dir目录下的所有文件和目录名

  默认获得当前工作目录下的目录及文件名;

  通过dir指定目录,获取其下的文件及目录名。可以使用绝对路径,也可以使用相对路径(.\\当前目录;..\\上一级目录)。

# 默认得到当前工作目录下的文件和目录名
print(os.listdir())
# 得到指定工作目录下的文件和目录名
# 绝对路径
print(os.listdir('D:\pycharm'))
# 相对路径: .\\当前目录,..\\上一级目录
print(os.listdir('..\\'))
View Code

  三、 创建

  1、os.mkdir()  创建文件夹

  只能创建指定路径下的文件夹,文件夹已存在时报错,文件夹的父目录不存在时报错。

  2、os.makedirs()  创建目录及文件夹

  可同时创建文件夹及目录。文件夹已存在时报错,文件夹父目录不存在时创建。也可只创建文件夹,如mkdir()。

# mkdir仅允许创建文件夹
os.mkdir('D:/pycharm/new_mkdir/hi')  # 创建目录hi,父目录已存在
# makedirs允许同时创建文件夹及目录;当目录存在时,功能相当于mkdir
os.makedirs('D:/pycharm/new_new_mkdir/hii')  # 创建目录:new_new_mkdir/hi
View Code

  四、 复制

  shutil.copytree(src,dst,symlinks=False) 复制文件目录src及其目录内全部文件到dst

  注意,dst可以是文件夹、也可以是文件,若dst已存在会报错。使用symlinks控制复制的是原文件还是快捷方式,默认复制原文件

import shutil
# 复制整个文件目录,
# symlinks=False是默认值,复制的一个连接,即快捷方式;设置symlinks=True,复制的是文件
# shutil.copytree('copy_file_test','copy_tree') # 复制原文件
# shutil.copytree('copy_file_test','copy_tree_symliks',symlinks=True) # 复制快捷方式
shutil.copytree('copy_file_test','first_xml_.xml')
View Code

  五、 删除

  (一)os.rmdir()  删除空文件夹

  rmdir删除文件夹时,文件夹必须为空,不为空时报错。

os.rmdir('D:/pycharm/new_new_mkdir')  # 指定被删除文件夹
os.rmdir('.\\new_new_mkdir')  # 相当路径
View Code

  (二)shutil.rmtree() 递归删除目录及文件夹   

import shutil
shutil.rmtree('copy_tree')
View Code

  六、移动 和 重命名

  (一)os.rename()  与文件使用同一个

  注意:使用时,需要目标文件夹不存在、但路径存在。可同时移动整个目录。

os.rename(r'..\\newmake_dir',r'.\\newmake_dir')
View Code

  (二)shutil.move(src,dst) 

  注意:dst的路径需要存在。若dst是文件夹,可以存在、也可以不存在。若dst是文件,存在时报错,不存在时新建dst文件名称的文件夹。

import shutil

# # 目标目录存在,直接移动至目标目录
# shutil.move('copy_tree_symliks','copy_file_test')

# # 目标目录不存在,创建目录后移动
# shutil.move('copy_file_test','copy_file_test_')

# 目标是已存在文件
# shutil.move('copy_file_test_\\copy_tree_symliks','first_xml.xml')
# # FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'first_xml.xml'

# 目标是不存在文件,在目标路径下创建文件夹后移动,文件夹的名字为目标文件名
shutil.move('copy_file_test_\\copy_tree_symliks','.\\first_xml_.xml')
# 创建名为’first_xml_.xml’的文件夹后移动
View Code

  除了移动目录,也可以重命名目录。

import shutil
# 重命名
shutil.move('first_xml_.xml','del_dir')
View Code

  七、 os.chdir(new_dir)  跳转目录

  从当前工作目录跳转至指定new_dir目录下,指定目录不存在时报错。

print(os.getcwd()) # 当前目录
os.chdir(r'..\\')  # 跳转至上一级目录
print(os.getcwd())  #跳转后目录
View Code