创建目录:
1 import os 2 os.makedirs('tmp/python/fileop', exist_ok=True)
会在当前目录下递归创建 tmp/python/fileop 目录,exist_ok=True 指定了,如果某个要创建的目录已经存在,也不会报错
删除目录或文件:
1 # 删除目录 shutil.rmtree() 可以递归的删除某个目录所有的子目录和子文件 2 import shutil 3 shutil.rmtree('tmp') 4 5 # 删除文件 6 os.remove('sdf.py')
拷贝文件:
1 from shutil import copyfile 2 3 # 拷贝 d:/tools/first.py 到 e:/first.py 4 copyfile('d:/tools/first.py', 'e:/first.py') # 如果拷贝前,e:/first.py 已经存在,则会被拷贝覆盖
拷贝目录:
1 from shutil import copytree 2 3 # 拷贝 d:/tools/aaa 目录中所有的内容 到 e:/bbb 中 4 copytree('d:/tools/aaa', 'e:/new/bbb') #拷贝前, 目标目录必须 不存在 ,否则会报错
修改文件名、目录名:
1 import os 2 3 # 修改目录名 d:/tools/aaa 为 d:/tools/bbb 4 os.rename('d:/tools/aaa','d:/tools/bbb') # 如果重命名之前 d:/tools/second.py 已经存在,则会被覆盖 5 6 # 修改文件名 d:/tools/first.py 为 d:/tools/second.py 7 os.rename('d:/tools/first.py','d:/tools/second.py')
对文件路径名的操作:
1 >>> import os 2 >>> path = '/Users/beazley/Data/data.csv' 3 4 >>> # 获取路径中的文件名部分 5 >>> os.path.basename(path) 6 'data.csv' 7 8 >>> # 获取路径中的目录部分 9 >>> os.path.dirname(path) 10 '/Users/beazley/Data' 11 12 >>> # 文件路径的拼接 13 >>> os.path.join('tmp', 'data', os.path.basename(path)) 14 'tmp/data/data.csv'
判断目录、文件是否存在:
1 import os 2 os.path.exists('d:/systems/cmd.exe') # True存在,False不存在 3 os.path.exists('d:/systems') 4 5 # 判断指定路径是否是文件 6 import os 7 8 # 返回值为True 表示是文件 9 os.path.isfile('d:/systems/cmd.exe') 10 11 # 判断指定路径是否是目录 12 import os 13 14 # 返回值为True 表示是目录 15 os.path.isdir('d:/systems')
获取文件的大小和日期:
1 >>> os.path.getsize('/etc/passwd') 2 3669 3 >>> os.path.getmtime('/etc/passwd') 4 1272478234.0 5 >>> import time 6 >>> time.ctime(os.path.getmtime('/etc/passwd')) 7 'Wed Apr 28 13:10:34 2010' 8 >>>
递归遍历目录下面所有的文件:
1 import os 2 3 # 目标目录 4 targetDir = r'd: mputildistcheck' 5 files = [] 6 dirs = [] 7 8 # 下面的三个变量 dirpath, dirnames, filenames 9 # dirpath 代表当前遍历到的目录名 10 # dirnames 是列表对象,存放当前dirpath中的所有子目录名 11 # filenames 是列表对象,存放当前dirpath中的所有文件名 12 13 for (dirpath, dirnames, filenames) in os.walk(targetDir): 14 files += filenames 15 dirs += dirnames 16 17 print(files) 18 print(dirs)
得到目录下所有的文件和子目录名:
1 import os 2 3 # 目标目录 4 targetDir = r'd: mputildistcheck' 5 6 7 files = os.listdir(targetDir) 8 print(files)
如果只需要获取目录中所有的文件或者只需要子目录:
1 import os 2 from os.path import isfile, join,isdir 3 4 # 目标目录 5 targetDir = r'd: mputildistcheck' 6 7 # 所有的文件 8 print([f for f in os.listdir(targetDir) if isfile(join(targetDir, f))]) 9 10 # 所有的目录 11 print([f for f in os.listdir(targetDir) if isdir(join(targetDir, f))])
得到目录中指定扩展名的文件和子目录:
1 import glob 2 exes = glob.glob(r'd: mp*.txt') 3 4 print(exes)
上面这个如果是Windows系统,可能会有异常(非要用glob,可以用字符串的replace方法把替换成/),可以使用endswith:
1 import os 2 for (dirpath, dirnames, filenames) in os.walk(targetDir): 3 for filename in filenames: 4 if filename.endswith('.txt'): 5 print(filename)