简介
通常情况下,我们能够手动对一些目录进行操作。但是有时候碰到大量重复的操作,比如:重命名一批目录或文件。此时,当然要使用python啦。python自带的os
库就能够完成大部分目录操作,通过其他库甚至能直接调用Linux系统下的命令,可以说使用起来非常方便。在本文中将介绍目录的操作方法,以供参考。
目录路径
在讲目录操作之前,首先要区分绝对路径和相对路径的概念:
- 绝对路径:是指从磁盘的根目录开始定位,直到对应的位置为止。比如
r"F:\文件操作\"
就是一个绝对路径(当使用\
时,最好在路径前加r
,或者使用/
或\\
,就不存在这个问题)。 - 相对路径:是指从当前所在路径开始定位,直到对应的位置为止。用
.
表示当前目录,用..
表示上级目录。比如:"../目录操作/"
就是一个相对路径,表示跟文件操作
目录同级的目录操作
目录。
接下来就介绍一些常用的目录操作命令。
获取当前目录位置
获取当前目录位置的命令是:
1 2 |
import os 变量1 = os.getcwd() |
首先导入os
库,接着调用getcwd()
方法。
代码演示:
1 2 3 |
>>>import os >>>a = os.getcwd() >>>print(a) |
结果为:
1 |
F:\文件操作 |
我们就获得了当前所在目录的位置。
创建目录
创建目录的命令如下:
1 2 |
import os os.mkdir(路径) |
通过调用mkdir()
方法创建一个目录,括号中就是目录所在的路径,可以使用绝对路径或相对路径。
代码演示:
1 2 |
>>>import os >>>os.mkdir(r'F:\finthon') |
这样我们就在F:
盘下创建了一个叫finthon
的目录。
目录重命名
有时候我们需要修改某个目录的名字,可以使用以下命令实现:
1 2 |
import os os.rename(原目录路径, 新目录路径) |
通过调用rename()
方法重命名该目录。
代码演示:
1 2 |
>>>import os >>>os.rename(r'F:\finthon', r'F:\python') |
于是,我们就将finthon
目录重命名为python
。
获取目录下的所有文件
通过listdir()
方法能够得到一个目录下所有内容(文件和文件夹)名字的列表。命令如下:
1 2 |
import os os.listdir(路径) |
代码演示:
1 2 |
>>>import os >>>os.listdir(r'C:\Python36-64') |
1 2 3 |
['chromedriver.exe', 'DLLs', 'Doc', 'geckodriver.exe', 'include', 'Lib', 'libs', 'LICENSE.txt', 'NEWS.txt', 'python.exe', 'python3.dll', 'python36.dll', 'pythonw.exe', 'Scripts', 'selenium', 'share', 'tcl', 'Tools', 'vcruntime140.dll'] |
可以看出我们得到了包含一个目录下的所有文件和目录名的列表。于是可以使用列表常用的操作来处理。
删除目录
删除目录的命令如下:
1 2 |
import os os.rmdir(目录路径) |
需要注意的是,rmdir()
命令只能删除空文件夹,如果文件夹中包含内容,则会报错,必须先将文件夹中的文件删除,再删除文件夹。
代码演示:
1 2 |
>>>import os >>>os.rmdir(r'F:\finthon') |
此时就将finthon
目录删除了。
os.path模块
这个模块在我日常使用过程中频率较高,所以单独拿出来讲一下基本操作。
连接目录和文件名:
格式如下:
1 2 |
import os os.path.join(目录, 文件名) |
例如:
1 2 3 4 |
>>>file_name = 'hello.py' >>>content_name = r'F:\finthon' >>>os.path.join(content_name, file_name) 'F:\\finthon\\hello.py' |
其实就等价于content_name + file_name
,这个命令很实用,我们可以批量返回某目录下的所有文件的路径。
代码演示:
1 2 3 4 5 6 7 8 |
import os content_name = r'F:\finthon' file_list = [] for file in os.listdir(content_name): file_path = os.path.join(content_name, file) file_list.append(file_path) print(file_list) |
通过以上代码,我们就得到了一个包含所有文件绝对路径的列表。
判断目录是否存在:
格式如下:
1 2 |
import os os.path.exists(路径) |
判断一个目录是否存在,这个命令经常跟os.mkdir()
方法一起使用来自动生成目录。
代码演示:
1 2 3 4 |
import os content_path = r'F:\finthon' if not os.path.exists(content_path): os.mkdir(content_path) |
首先通过os.path.exists()
判断这个路径是否存在,如果不存在,就使用os.mkdir()
方法创建这个目录。
目录操作方法总结
方法 | 描述 |
---|---|
os.access(path, mode) | 检验权限模式 |
os.chdir(path) | 改变当前工作目录 |
os.chmod(path, mode) | 更改权限 |
os.chown(path, uid, gid) | 更改文件所有者 |
os.chroot(path) | 改变当前进程的根目录 |
os.getcwd() | 返回当前工作目录 |
os.getcwdu() | 返回一个当前工作目录的Unicode对象 |
os.link(src, dst) | 创建硬链接,名为参数 dst,指向参数 src |
os.listdir(path) | 返回path指定的文件夹包含的文件或文件夹的名字的列表 |
os.lstat(path) | 像stat(),但是没有软链接 |
os.makedirs(path[, mode]) | 递归文件夹创建函数。像mkdir(), 但创建的所有intermediate-level文件夹需要包含子文件夹 |
os.mkdir(path[, mode]) | 以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制) |
os.mkfifo(path[, mode]) | 创建命名管道,mode 为数字,默认为 0666 (八进制) |
os.path 模块 | 获取文件的属性信息 |
os.remove(path) | 删除路径为path的文件。如果path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory |
os.removedirs(path) | 递归删除目录 |
os.rename(src, dst) | 重命名文件或目录,从 src 到 dst |
os.renames(old, new) | 递归地对目录进行更名,也可以对文件进行更名 |
os.rmdir(path) | 删除path指定的空目录,如果目录非空,则抛出一个OSError异常 |
os.stat(path) | 获取path指定的路径的信息,功能等同于C API中的stat()系统调用 |
os.symlink(src, dst) | 创建一个软链接 |
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]]) | 输出在文件夹中的文件名通过在树中游走,向上或者向下 |
总结
本文详细地介绍了一些常用的目录操作,熟练掌握这些方法真的可以事半功倍,配合文件操作就能真正地联通线上线下。