zoukankan      html  css  js  c++  java
  • 目录和文件操作

    创建目录:

    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)
  • 相关阅读:
    STL容器与拷贝构造函数
    BOOST_STATIC_ASSERT and BOOST_ASSERT
    STL map与Boost unordered_map
    C++ load shared library
    C++中模板不能把实现和声明放在两个不同的文件下
    C++ static、const和static const 以及它们的初始化
    Resource editor
    stdext A C++ STL Extensions Libary
    C++ boost shared_ptr as a hash_map key
    C++前置声明
  • 原文地址:https://www.cnblogs.com/zzmx0/p/12699926.html
Copyright © 2011-2022 走看看