什么是os模块

os模块提供了多数操作系统的功能接口函数。当os模块被导入后,它会自适应于不同的操作系统平台,根据不同的平台进行相应的操作,在python编程时,经常和文件、目录打交道,这时就离不了os模块,本节内容将对os模块提供的函数进行详细的解读

一、使用脚本自动安装Python版本

要求:没有安装过Python3的系统

如果已经安装过Python3,只能选择一个不用的版本安装

1、PyCharm连接Linux

2、os模块执行shell命令

os.system()的作用:

执行shell命令

返回shell命令的返回值

命令的输出会输出到标准输出

代码演示:

os.system('cls')

编写自动安装Python的脚本

(1)实现步骤:

下载Python版本源码

安装Python需要的依赖库

编译安装Python

(2)伪代码:

1. 判断用户是不是root

2. 如果是,等待用户输入Python版本

3. 执行shell命令下载源码包

4. 安装依赖开发包

5. 编译安装Python

(3)脚本内容如下(基于Python2):

auto_install_python.py

# coding=utf-8

import os

# 判断用户是否是root用户

if os.getuid() == 0:

pass

else:

print('当前用户不是root用户!')

SystemExit(1)

# 安装Python依赖库

cmd_module = 'yum -y install wget gcc zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel'

res = os.system(cmd_module)

if res != 0:

print('Python依赖库安装失败,请重新执行该脚本!')

SystemExit(1)

else:

print('Python依赖库安装成功!')

# 输入python版本,下载Python源码包到本地目录

# weget url

version = raw_input('请输入python版本:(3.6/3.8)')

if version == '3.6':

url = 'https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tgz'

else:

url = 'https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tgz'

cmd = 'wget ' + url

res = os.system(cmd)

if res != 0:

print('Python源码包下载失败!')

SystemExit(1)

else:

print('===============================>>>Python源码包下载成功!')

# 解压Python源码包

# tar zxvf Python-3.8.2.tgz

if version == '3.6':

package_name = 'Python-3.6.10'

else:

package_name = 'Python-3.8.1'

res = os.system('tar zxvf ' + package_name + '.tgz')

if res != 0:

print('解压失败!')

SystemExit(1)

else:

print('=============<<解压成功!>>===============')

# 必要的配置,否则出现错误:“make: *** [pybuilddir.txt] 错误1”

# export LANG=zh_CN.UTF-8

# export LANGUAGE=zhb_CN.UTF-8

cmd_export_lang = 'export LANG=zh_CN.UTF-8'

cmd_export_language = 'export LANGUAGE=zhb_CN.UTF-8'

res1 = os.system(cmd_export_lang)

res2 = os.system(cmd_export_language)

if res1 != 0 or res2 != 0:

print('配置失败,请检查解脚本后在运行!')

SystemExit(1)

# 切换Python目录

os.chdir(package_name)

os.system('./configure --prefix=/usr/local/python3')

res = os.system('make && make install')

if res != 0:

print('源码编译失败!')

SystemExit(1)

else:

print('=========<>==========')

# 修改用户环境变量

os.system('echo "export PYTHON3=/usr/local/python3" >>~/.bash_profile')

os.system('echo "export PATH=$PYTHON3/bin:$PATH" >>~/.bash_profile')

os.system("source ~/.bash_profile")

os.system('cat ~/.bash_profile')

print('用户环境变量已更改,请进行验证!')

os.system('ln -s /usr/local/python3/bin/* /usr/local/bin')

os.system('python3 --version')

3、上传到Linux并执行

Linux执行

[root@python ~]# cd /opt/

[root@python opt]# python test1.py

二、Python的os模块shell

Python 的 os 模块封装了常见的文件和目录操作,本文只列出部分常用的方法,更多的方法可以查看官方文档。

下面是部分常见的用法:

方法

说明

os.mkdir

创建目录

os.rmdir

删除目录

os.rename

重命名

os.remove

删除文件

os.getcwd

获取当前工作路径

os.walk

遍历目录

os.path.join

连接目录与文件名

os.path.split

分割文件名与目录

os.path.abspath

获取绝对路径

os.path.dirname

获取路径

os.path.basename

获取文件名或文件夹名

os.path.splitext

分离文件名与扩展名

os.path.isfile

判断给出的路径是否是一个文件

os.path.isdir

判断给出的路径是否是一个目录

1、安装ipython

[root@root ~]# pip3 install -i https://pypi.douban.com/simple/ ipython

启动ipython

[root@root ~]# ipython

如果启动不了使用:

python3 -m IPython --version

来查看ipython版本,如果看到版本信息,那么就可以使用python -m IPython 命令来启动ipython

如果要使用ipython命令来启动,可以在用户目录下的 .bash_profile中增加如下:

alias ipython="python3 -m IPython"

再次启动ipython

python3 -m IPython --version

这样就可以了

2、例子

后文的例子以下面的目录结构为参考,工作目录为 /Users/ethan/coding/python。

Users/ethan

└── coding

└── python

├── hello.py - 文件

└── web - 目录

看看例子:

(1)os.path.abspath:获取文件或目录的绝对路径

$ pwd

/Users/ethan/coding/python

$ python

>>> import os # 记得导入 os 模块

>>> os.path.abspath('hello.py')

'/Users/ethan/coding/python/hello.py'

>>> os.path.abspath('web')

'/Users/ethan/coding/python/web'

>>> os.path.abspath('.') # 当前目录的绝对路径

'/Users/ethan/coding/python'

(2)os.path.dirname:获取文件或文件夹的路径

>>> os.path.dirname('/Users/ethan/coding/python/hello.py')

'/Users/ethan/coding/python'

>>> os.path.dirname('/Users/ethan/coding/python/')

'/Users/ethan/coding/python'

>>> os.path.dirname('/Users/ethan/coding/python')

'/Users/ethan/coding'

(3)os.path.basename:获取文件名或文件夹名

>>> os.path.basename('/Users/ethan/coding/python/hello.py')

'hello.py'

>>> os.path.basename('/Users/ethan/coding/python/')

''

>>> os.path.basename('/Users/ethan/coding/python')

'python'

(4)os.path.splitext:分离文件名与扩展名

>>> os.path.splitext('/Users/ethan/coding/python/hello.py')

('/Users/ethan/coding/python/hello', '.py')

>>> os.path.splitext('/Users/ethan/coding/python')

('/Users/ethan/coding/python', '')

>>> os.path.splitext('/Users/ethan/coding/python/')

('/Users/ethan/coding/python/', '')

(5)os.path.split:分离目录与文件名

>>> os.path.split('/Users/ethan/coding/python/hello.py')

('/Users/ethan/coding/python', 'hello.py')

>>> os.path.split('/Users/ethan/coding/python/')

('/Users/ethan/coding/python', '')

>>> os.path.split('/Users/ethan/coding/python')

('/Users/ethan/coding', 'python')

(6)os.path.isfile:是否是一个文件

os.path.isdir:是否是一个目录

>>> os.path.isfile('/Users/ethan/coding/python/hello.py')

True

>>> os.path.isdir('/Users/ethan/coding/python/')

True

>>> os.path.isdir('/Users/ethan/coding/python')

True

>>> os.path.isdir('/Users/ethan/coding/python/hello.py')

False

(7)os.walk:遍历目录

os.walk 是遍历目录常用的模块,它返回一个包含 3 个元素的元祖:(dirpath, dirnames, filenames)。dirpath 是以 string 字符串形式返回该目录下所有的绝对路径;dirnames 是以列表 list 形式返回每一个绝对路径下的文件夹名字;filesnames 是以列表 list 形式返回该路径下所有文件名字。

>>> for root, dirs, files in os.walk('/Users/ethan/coding'):

... print root

... print dirs

... print files

...

/Users/ethan/coding

['python']

[]

/Users/ethan/coding/python

['web2']

['hello.py']

/Users/ethan/coding/python/web2

[]

[]

3、os模块打开文件

方法如下:

os.open(filename, flag, [,mode])

flag参数说明:

file # 要打开的文件

flags # 该参数可以是以下选项,多个使用 "|" 隔开:

os.O_RDONLY # 以只读的方式打开

os.O_WRONLY # 以只写的方式打开

os.O_RDWR # 以读写的方式打开

os.O_NONBLOCK # 打开时不阻塞

os.O_APPEND # 以追加的方式打开

os.O_CREAT # 创建并打开一个新文件

os.O_TRUNC # 打开一个文件并截断它的长度为零(必须有写权限)

os.O_EXCL # 如果指定的文件存在,返回错误

os.O_SHLOCK # 自动获取共享锁

os.O_EXLOCK # 自动获取独立锁

os.O_DIRECT # 消除或减少缓存效果

os.O_FSYNC # 同步写入

os.O_NOFOLLOW# 不追踪软链接

mode # 类似 chmod()。

4、os模块对文件进行操作

常用方法如下:

# 读取文件

os.read(fd, buffersize)

# 写入文件

os.write(fd, string)

# 文件指针操作

os.lseek(fd, pos, how)

# 关闭文件

os.close(fd)

代码演示:

文件创建和写入

import os

# 打开文件

fd = os.open("abc.txt", os.O_RDWR | os.O_CREAT)

# 写入字符串

str = "Hello Python!"

ret = os.write(fd, bytes(str, 'UTF-8'))

# 输入返回值

print("写入的位数为: ")

print(ret)

print("写入成功")

# 关闭文件

os.close(fd)

print("关闭文件成功!!")

输出结果如下:

写入的位数为:

13

写入成功

关闭文件成功!!

文件读取

import os

# 打开文件

fd = os.open("abc.txt", os.O_RDWR)

# 读取文本

ret = os.read(fd, 6)

print(ret)

# 关闭文件

os.close(fd)

print("关闭文件成功!!")

输出结果如下:

b'Hello '

关闭文件成功!!

5、os模块管理文件和目录

常用方法如下:

os方法

说明

remove(path)

删除文件

rename(old, new)

修改文件或者目录名

getcwd()

获取当前目录

listdir(path)

返回当前目录下所有文件组成的列表

mkdir(path [,mode])

创建目录

makedirs(path [,mode])

创建多级目录

rmdir(path)

删除目录(目录必须为空目录)

removedirs(path)

删除多级目录(目录必须为空目录)

代码演示:

# coding=utf-8

import os

print(os.getcwd()) # pwd

print(os.listdir()) # ls

os.rename('abc.txt','test.txt') # mv abc.txt test.txt

os.remove('read.py') # rm -f abc.txt

os.mkdir('test') # mkdir dir1

os.makedirs('demo/abc') # mkdir -p dir2/dir22

os.rmdir('test') # 目录必须为空

os.removedirs('demo') #目录必须为空

6、os模块管理文件权限

os方法

说明

access(path, mode)

判断该文件权限:F_OK存在;
权限:R_OK,W_OK,X_OK

chmod(path, mode)

修改文件权限:0o755

chown(path, uid, gid)

更改文件所有者,如果不修改可以设置为 -1

代码演示:

import os

# 测试路径是否存在:os.F_OK

res = os.access('test.txt',os.F_OK)

print(res)

# 测试当前用户对该文件是否有读的权限

res = os.access('test.txt',os.R_OK)

print(res)

# 测试当前用户对该文件是否有写的权限

res = os.access('test.txt',os.W_OK)

print(res)

# 测试当前用户对该文件是否有执行的权限

res = os.access('test.txt',os.X_OK)

print(res)

# 更改当前用户的权限

os.chmod('test.txt',0o755)

# 更改文件的所有者

os.chown('test.txt', 1001, 1002)

执行前提,确保需要文件存在。

7、os.path模块管理文件与路径

(1)拆分路径

os.path方法

说明

split

返回一个二元组,包含文件的路径和文件名

dirname

返回文件的路径

basename

返回文件名

splitext

返回一个去掉文件扩展名的部分和扩展名的二元组

代码演示:

In [10]: os.getcwd()

Out[10]: '/opt/os_demo'

In [11]: os.listdir()

Out[11]: ['os_access.py', 'test.txt']

In [12]: path = '/opt/os_demo/test.txt'

In [13]: os.path.split(path)

Out[13]: ('/opt/os_demo', 'test.txt')

In [14]: os.path.dirname(path)

Out[14]: '/opt/os_demo'

In [15]: os.path.basename(path)

Out[15]: 'test.txt'

In [16]: os.path.splitext(path)

Out[16]: ('/opt/os_demo/test', '.txt')

(2)构建路径

os.path方法

说明

expanduser

展开用户的HOME目录,如~,~oracle

abspath

得到文件或路径的绝对路径

join

根据不同的操作系统平台,使用不同的路径分隔符拼接路径

isabs

检查一个路径是不是一个绝对路径

代码演示:

In [19]: os.path.expanduser('~')

Out[19]: '/root'

In [20]: os.path.expanduser('~oracle')

Out[20]: '/home/oracle'

In [21]: os.path.expanduser('~accp')

Out[21]: '/home/accp'

In [22]: os.path.expanduser('~acp')

Out[22]: '~acp'

In [23]: os.path.abspath('.')

Out[23]: '/opt/os_demo'

In [24]: os.path.abspath('..')

Out[24]: '/opt'

In [25]: os.path.join('/opt/os_demo','test.txt')

Out[25]: '/opt/os_demo/test.txt'

In [26]: os.path.isabs('/opt/os_demo/')

Out[26]: True

In [27]: os.path.isabs('.')

Out[27]: False

(3)获取文件属性

os.path

方法

os.path.getmtime(path)

返回最近文件修改时间

os.path.getctime(path)

返回文件 path 创建时间

os.path.getsize(path)

返回文件大小,如果文件不存在就返回错误

代码演示:

In [33]: os.path.getatime(path)

Out[33]: 1587547270.7306058

In [34]: os.path.getmtime(path)

Out[34]: 1587547270.7306058

In [35]: os.path.getctime(path)

Out[35]: 1587548055.4721448

In [36]: os.path.getsize(path)

Out[36]: 0

(4)判断文件类型

os.path方法

说明

os.path.isfile(path)

判断路径是否为文件

os.path.isdir(path)

判断路径是否为目录

os.path.islink(path)

判断路径是否为链接

os.path.ismount(path)

判断路径是否为挂载点

代码演示:

In [37]: os.path.isfile(path)

Out[37]: True

In [38]: os.path.isdir(path)

Out[38]: False

In [39]: os.path.islink(path)

Out[39]: False

In [40]: os.path.ismount(path)

Out[40]: False

8、os.walk遍历目录树

os.walk0方法遍历某个目录及其子目录,对于每一个目录,walk()函数返回一 个三元组(dirpath, dirnames.filenames)。其中dirpath保存的是 当前目录,dirnames是 当前目录下的子目录列表,filenames是 当前目录下的文件列表。

# coding=utf-8

import os

for root, dirs, files in os .walk(".", topdown=False):

for name in files:

print (os.path.join(root, name))

for name in dirs:

print (os.path.join(root, name))

(1)在Linux用ipython中把/opt目录遍历一下

In [4]: for root, dirs, files in os .walk("/opt"):

...: print(root)

...: print()

...: for name in files:

...: print(os.path.join(root,name))

...: for dir in dirs:

...: print(os.path.join(root,dir))

...:

输出结果如下:

/opt

/opt/rh

/opt/rh

os.walk()方法是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情.

(2)打印最常用的10条Linux命令

步骤:

读取~/.bash_history文件内容

将读取到的内容格式化(去掉空行)

获取指令:索引为0的元素

指令使用次数进行累加

去除重复的数据

[root@python opt]# vim find_cmd.py

# coding=utf-8

import os

from collections import Counter

count = Counter()

with open(os.path.expanduser('~/.bash_history')) as f:

for line in f:

cmd = line.strip().split()

if cmd:

count[cmd[0]] += 1

print(count.most_common(10))

输出结果如下:

[root@python opt]# python3 find_cmd.py

[('ip', 8), ('cd', 8), ('systemctl', 7), ('ls', 6), ('vim', 5), ('ping', 3), ('tar', 3), ('vmware-install.pl', 3), ('rm', 3), ('sh', 2)]

python安装os模块_python的os模块(ipython,文件,目录,权限,管理)相关推荐

  1. python中sys用法_python中os和sys模块的区别与常用方法总结

    python 的 python中os和sys模块的区别与常用方法总结 前言 本文主要介绍了关于python中os和sys模块区别与常用方法的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看 ...

  2. python里的os模块_python中os模块再回顾

    先看下我的文件目录结构 F:\PYTHON项目\ATM购物车\7月28 在此目录下的文件如下: 封装.py 模块os.sys复习.py 运行当前的文件是模块os.sys复习.py 1.获取当前文件所在 ...

  3. python找不到os模块_python之os模块

    在自动化测试中,经常需要查找操作文件,比如说查找配置文件(从而读取配置文件的信息),查找测试报告(从而发送测试报告邮件),经常要对大量文件和大量路径进行操作,这就依赖于os模块,所以今天整理下比较常用 ...

  4. python怎么导入os模块_python之os模块

    在自动化测试中,经常需要查找操作文件,比如说查找配置文件(从而读取配置文件的信息),查找测试报告(从而发送测试报告邮件),经常要对大量文件和大量路径进行操作,这就依赖于os模块,所以今天整理下比较常用 ...

  5. python os.walk模块_Python之os.walk和os.path.walk

    一.os.walk() 函数声明:os.walk(top,topdown=True,οnerrοr=None) (1)参数top表示需要遍历的顶级目录的路径. (2)参数topdown的默认值是&qu ...

  6. python里os什么模块_python中os模块的主要方法

    print(os.getcwd()) # 获取当前的工作目录 print(os.chdir(r'D:\pycharm')) #改变当前脚本目录 print(os.curdir) #返回当前目录 pri ...

  7. python logging日志分割_python logging日志模块以及多进程日志

    本篇文章主要对 python logging 的介绍加深理解.更主要是 讨论在多进程环境下如何使用logging 来输出日志, 如何安全地切分日志文件. 1. logging日志模块介绍 python ...

  8. python必学的模块_Python常用的模块

    模块和包 1.1模块介绍模块定义:一系列功能的集合体 模块使用: import导入模块 或者 from ... import... 导入模块 模块分类:内置模块 自定义模块 第三方模块 模块加载顺序: ...

  9. python的主要应用领域及常用的函数模块_python之常用模块篇5

    一.日志模块,logging模块 1)logging模块简单使用,屏幕输出.默认级别30 import logging logging.debug('debug...') # 10logging.in ...

最新文章

  1. relu与maxpool
  2. mysql中的参数如何调试_mysql 查询优化 ~ 查询参数调节
  3. bzoj#4555. [Tjoi2016Heoi2016]求和
  4. 怎么快速写python自动化脚本_自动化脚本如何编写?
  5. AI杂谈(2)请教支持向量机用于图像分类
  6. android 显示Gift图片
  7. Graph——bfs,dfs
  8. nyoj 最强DE 战斗力 (数论入门)
  9. IBM ThinkPad SL400 驱动全集下载
  10. EDEM - Fluent - CFD风道耦合
  11. Tesseract-OCR识别 学习(一)命令识别
  12. 澳洲留学生面经,Java后端,阿里、头条、百度、华为、微策略
  13. [转载]Geronimo 叛逆者,第 8 部分: 未来的 Apache Geronimo
  14. 文小刚:量子革命是最不可思议的物理革命
  15. 推荐一本书:《Visual C++程序开发范例宝典》——你可以找到你想要的实例
  16. 怎么建立设备管理系统?
  17. ExaGrid在2021年网络计算大奖评选中大获全胜
  18. 名风新浪博客评论软件-自动评论推广
  19. 如何解决PDFcopy文本乱码的问题!
  20. 和的极限等于极限之和

热门文章

  1. java快速排序的时间复杂度_java 快速排序
  2. 无法读取内存属于错误吗_深入了解 JavaScript 内存泄露
  3. Allegro16.6软件布局设计技巧:模块复用
  4. LTE 轻松进阶总结01
  5. BRCM5.02编译三 : Error: Could not retreive version from libtoolize
  6. 设置 JAVA_HOME
  7. VMware Horizon虚拟桌面工具箱之审计与远程协助
  8. Redis 服务器管理相关命令
  9. 微软 Build 2017 开发者大会:Azure 与 AI 的快速发展
  10. 集合详解(三)----Map的两种遍历方式