Python Linux系统管理之文件与文件路径管理

摘要:
在Python中,有一个os模块,也提供了许多便利的方法来管理文件和目录。所以,os模块提供的肯定是操作系统相关的功能了。如果path为None,则使用path=’.’。mkdir创建目录makedirs递归创建多层目录rename重命名文件或目录remove删除文件rmdir删除目录removedirs递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空抛出异常。walk遍历top路径下的所有子目录,返回一个包含3个元素的元组:。

一、介绍

在 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’]

免责声明:文章转载自《Python Linux系统管理之文件与文件路径管理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Jmeter之HTTP Request Defaultspython中的str()与eval函数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

阿里云搭建wordpress生产级CMS网站实践

搭建cms内容站点时,wordpress是一个很好的选择,不用做任何开发就可以通过配置、插件获得丰富的功能。用docker容器技术部署运维都非常简单,特别是对于wordpress这种我们无需做任何开发的组件。而出于低成本考虑,公有云都是一个最佳选择,这里我选择阿里云。为了提速,wordpress前会有一个nginx作为负载均衡和web加速服务器,将静态内容...

Python Web 开发的十个框架【转载】

Python 是一门动态、面向对象语言。其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性。除了语言本身的设计目的之外,Python标准 库也是值得大家称赞的,Python甚至还自带服务器。 其它方面,Python拥有足够多的免费数据函数库、免费的Web网页模板系统、还有与Web服务 器进行交互的库、这些都可以设计到你的Web应用程序...

Linux基础知识学习:Linux下修改文件名或修改文件夹名称(有待解决问题)

Linux下修改文件名或修改文件夹名称 1、修改文件夹名称 1.1我先创建一个test文件夹用来测试 mkdir test 1.2用 mv 命令 将文件移动,目标地址如果加 / 就 代表文件夹,如果没有 / 就会重新命名 例: mv test Test 表示文件重命名 mv test /Test/ 将test移动到根目录的Test文件夹下 在练...

linux随笔:安装软连接时:ln: failed to create symbolic link ‘/usr/bin/python3/python3’: File exists

在云服务上面安装python: 1.安装软连接时报:ln: failed to create symbolic link ‘/usr/bin/python3/python3’: File exists 2.解决方法:删除软连接 rm /usr/bin/python3 重新安装软连接:ln -s /root/python36/bin/python3 /usr...

linux 安装网易云音乐

1.首先去官网下载最新的网易云 网易云音乐曾经推出官方Linux版本,提供的下载安装包有:deepin15(32位):http://s1.music.126.net/download/pc/net ... 0_i386.debdeepin15(64位):http://s1.music.126.net/download/pc/net ... _amd64.d...

Python基本数据统计(四)---- 其他问题

学习中遇到的其他问题: 1.填写以下内容,使得统计在2015年整年内(即1月1日至12月31日)微软股票涨价的每个月天数据。 list1 =[] tmpdf = quotesdf['15/01/01':'15/12/31'] for i inrange(0, len(tmpdf)): list1.append(int(tmpdf.index[i]...