目录和文件操作

创建目录:

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:\tmp\util\dist\check'
 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:\tmp\util\dist\check'
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:\tmp\util\dist\check'
 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:\tmp\*.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)

猜你喜欢

转载自www.cnblogs.com/zuzhuangmengxiang/p/12699926.html