zoukankan      html  css  js  c++  java
  • Python Linux系统管理之文件与文件路径管理

    一、介绍

    在 Linux 中,操作系统提供了很多的命令(例如:ls、cd),用于文件和目录管理。在 Python 中,有一个 os 模块,也提供了许多便利的方法来管理文件和目录。

    二、os 模块

    os:语义为操作系统。所以,os 模块提供的肯定是操作系统相关的功能了(与具体的平台无关)。

    如果用 dir() 查看 os,会发现内容相当多。下面,只列出文件和目录的相关方法:

    方法 描述
    getcwd() 获取当前工作目录
    chdir(path) 将当前的工作目录更改为指定的路径
    listdir(path=None) 列出指定目录中的文件名。如果 path 为 None,则使用 path=’.’。
    mkdir(path, mode=511, *, dir_fd=None) 创建目录
    makedirs(name, mode=511, exist_ok=False) 递归创建多层目录
    rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None) 重命名文件或目录
    remove(path, *, dir_fd=None) 删除文件
    rmdir(path, *, dir_fd=None) 删除目录
    removedirs(name) 递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空抛出异常。
    walk(top, topdown=True, onerror=None, followlinks=False) 遍历 top 路径下的所有子目录,返回一个包含 3 个元素的元组:(dirpath, dirnames, filenames)。
    os.curdir 指代当前目录(’.’)
    os.pardir 指代上一级目录(’..’)
    os.sep 路径分割符(Windows 为 ‘\’,Linux 为 ‘/’)
    os.linesep 行终止符(Windows 为 ‘ ’,Linux 为 ‘ ’)
    os.name 指代当前使用的操作系统(Windows 系统为 ‘nt’,Linux 为 ‘posix’)

    简单认识 os 模块后,来看如何使用 – 输出当前的操作系统:

    >>> import os
    >>> os.name # 操作系统
    ‘posix’

    如果是 posix,说明系统是 Linux;如果是 nt,则是 Windows 系统。

    三、获取当前工作目录

    要获取当前工作目录,有两种方式:

    getcwd():以 unicode 字符串的形式返回

    getcwdb():以 bytes 字符串的形式返回

    >>> os.getcwd()
    ‘/home/wang/workspace’
    >>>
    >>> os.getcwdb()
    b’/home/wang/workspace’

    四、更改当前工作目录

    可以使用 chdir() 更改当前工作目录:

    >>> os.getcwd() # 更改前
    ‘/home/wang/workspace’
    >>>
    >>> os.chdir(“/etc”) # 更改当前工作目录
    >>>

    >>> os.getcwd() # 更改后

    ‘/etc’

    注意: 在 Windows 中,经常也会使用反斜杠(),这时使用转义序列(\)更安全。

    五、列出文件和目录

    目录中的所有文件和子目录可以使用 listdir() 列出:

    >>> os.listdir(‘/’) # 列出根目录 / 中的文件和子目录
    [‘boot’, ‘dev’, ‘home’, ‘proc’, ‘run’, ‘sys’, ‘var’, ‘etc’, ‘root’, ‘tmp’, ‘usr’, ‘bin’, ‘sbin’, ‘lib’, ‘lib64’, ‘media’, ‘mnt’, ‘opt’, ‘srv’]
    >>>
    >>> os.getcwd()
    ‘/home/wang/workspace’

    >>> os.listdir() # 列出当前目录中的文件和子目录

    [‘python’, ‘README.txt’]

    注意: 如果没有指定路径,将从当前目录返回。

    六、创建目录

    可以使用 mkdir() 创建目录:

    >>> os.listdir() # 创建前
    [‘python’, ‘README.txt’]
    >>>
    >>> os.mkdir(“PHP”) # 在当前路径下,创建名为 PHP 的目录
    >>>

    >>> os.listdir() # 创建后

    [‘python’, ‘README.txt’, ‘PHP’]

    注意: 如果未指定完整路径,则将在当前目录中创建。

    七、重命名文件或目录

    rename() 可以重命名文件或目录,第一个参数为旧名称,第二个参数为新名称:

    >>> os.listdir() # 重命名前
    [‘python’, ‘README.txt’, ‘PHP’]
    >>>
    >>> os.rename(“README.txt”, “Notice.txt”) # 重命名文件
    >>> os.rename(“PHP”, “Java”) # 重命名空目录

    >>> os.rename(“python”, “Py”) # 重命名非空目录

    >>>

    >>> os.listdir() # 重命名后

    [‘Notice.txt’, ‘Java’, ‘Py’]

    可以看到,无论目录是否为空,都可以重命名成功。

    八、删除文件或目录

    可以使用 remove() 删除文件,使用 rmdir() 删除空目录:

    >>> os.listdir() # 删除前
    [‘Notice.txt’, ‘Java’, ‘Py’]
    >>>
    >>> os.remove(“Notice.txt”) # 删除文件
    >>> os.rmdir(“Java”) # 删除空目录

    >>>

    >>> os.listdir() # 删除后

    [‘Py’]

    注意: rmdir() 只能删除空目录,无法删除非空目录。否则,会引发 OSError。

    要删除非空目录,需要借助 shutil 模块,使用 rmtree():

    >>> os.listdir()
    [‘Py’]
    >>>
    >>> os.rmdir(“Py”) # 无法删除非空目录

    OSError: [Errno 39] Directory not empty: ‘Py’

    >>>

    >>> import shutil

    >>> shutil.rmtree(“Py”) # 删除非空目录

    >>>

    >>> os.listdir()

    []

    但是,复制、移动文件的相关函数居然在 os 模块中不存在!原因是复制文件并非由操作系统提供的系统调用。

    幸运的是,shutil 模块提供了 copy()、move() 相关的函数,还可以在 shutil 模块中找到很多实用函数,它们可以看做是 os 模块的补充。

    九、遍历目录

    walk() 是遍历目录常用的方法,它返回一个包含 3 个元素的元组:(dirpath, dirnames, filenames):

    dirpath:以字符串形式返回该目录下所有的绝对路径

    dirnames:以列表形式返回每一个绝对路径下的目录

    filesnames:以列表形式返回该路径下所有文件

    使用命令 tree,以树状图列出目录的内容:

    [wang@localhost workspace]$ tree
    .
    ├── python
    │ ├── Notice.txt
    │ └── os

    │ ├── test2.py

    │ └── test.py

    └── README.txt

    2 directories, 4 files

    使用 walk() 方法:

    >>> for root, dirs, files in os.walk(“/home/wang/workspace”):
    … print(root)
    … print(dirs)
    … print(files)
    … print()

    /home/wang/workspace

    [‘python’]

    [‘README.txt’]

    /home/wang/workspace/python

    [‘os’]

    [‘Notice.txt’]

    /home/wang/workspace/python/os

    []

    [‘test.py’, ‘test2.py’]

     
     
  • 相关阅读:
    Elasticsearch7.6 环境部署
    JavaScript的语法
    如何在页面中引入JS教程
    什么是.bat文件
    window对象的一些其他通用函数
    history对象
    location对象
    32位与64位系统基本数据类型的字节数
    cygwin中运行python不能进入交互模式
    在Cygwin上安装编辑器vim
  • 原文地址:https://www.cnblogs.com/liujunjun/p/13475321.html
Copyright © 2011-2022 走看看