Python程序设计 内置模块 系统操作

系统操作

1. os 模块

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

1.1 os.path常见用法

os.path 模块是跨平台的,即使不打算在平台之间移植自己的程序也应该用 os.path,好处多多。

1.11 目录操作

例子

后文的例子以下面的目录结构为参考,工作目录为 'C:\\Users\\Administrator'

  • os.path.abspath(name) 获取绝对路径
  • os.path.dirname(path) 获取路径
  • os.path.basename(path) 获取文件名或文件夹名
  • os.path.splitext() 分离文件名与扩展名
  • os.path.isfile() 判断给出的路径是否是一个文件
  • os.path.isdir() 判断给出的路径是否是一个目录
  • os.path.split(name) 分割文件名与目录
  • os.path.join(path,name) 连接目录与文件名
  • 第一组 os.path 函数可用于将表示文件名的字符串解析为其组成部分。重要的是要意识到这些功能不依赖于实际存在的路径。

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

In [4]: os.getcwd()
Out[4]: 'C:\\Users\\Administrator'In [7]: os.path.abspath('hello.py')
Out[7]: 'C:\\Users\\Administrator\\hello.py'In [8]: os.path.abspath('.')
Out[8]: 'C:\\Users\\Administrator'
  • os.path.split:分离目录与文件名
  • split() 函数将路径分成两个独立的部分,并返回一个tuple结果。第二个元素是路径的最后一个元素,第一个元素是它之前的所有元素。
  • join() 函数能将两个或者多个独立部分,拼接为一个路径.
In [9]: os.path.split(os.path.abspath('.'))
Out[9]: ('C:\\Users', 'Administrator')In [11]: os.path.join('C:\\Users', 'Administrator')
Out[11]: 'C:\\Users\\Administrator'
  • os.path.splitext:分离文件名与扩展名

splitext()类似于split(),但在扩展分隔符上划分路径,而不是目录分隔符。

In [17]: os.path.splitext('filename.txt')
Out[17]: ('filename', '.txt')

案例二:

在测试文件夹下, 给所有的 txt 文件前加上前缀 [前缀] 两个字

1.12 检查路径
  • os.path.dirname:获取文件或文件夹的路径
In [7]: os.path.dirname('C:\\Users\\Administrator\\hello.py')
Out[7]:'C:\\Users\\Administrator'In [8]: os.path.dirname('C:\\Users\\Administrator\\python')
Out[8]: 'C:\\Users\\Administrator'In [9]: os.path.dirname('C:\\Users\\Administrator')
Out[9]: 'C:\\Users'
  • os.path.basename:获取文件名或文件夹名
In [10]: os.path.basename('C:\\Users\\Administrator\\hello.py')
Out[10]: 'hello.py'In [11]: os.path.basename('/Users/ethan/coding/python')
Out[11]: 'python'
  • os.path.isfile/os.path.isdir
In [17]: os.path.isfile('C:\\Users\\Administrator\\hello.py')
Out[17]: TrueIn [18]: os.path.isfile('C:\\Users\\Administrator\\hello1.py')
Out[18]: FalseIn [20]: os.path.isdir('C:\\Users\\Administrator\\hello1.py')
Out[20]: FalseIn [21]: os.path.isdir('C:\\Users\\Administrator')
Out[21]: True

案例三:

显示当前目录中所有的目录

In [12]: [x for x in os.listdir('.') if os.path.isdir(x)]
方法说明
os.mkdir创建目录
os.rmdir删除目录
os.rename重命名
os.remove删除文件
os.getcwd获取当前工作路径
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.2 os常见用法
  • os.mkdir(name) 创建目录
  • os.rmdir(name) 删除目录
  • os.rename(name) 重命名
  • os.remove(file) 删除文件
  • os.getcwd() 获取当前工作路径
  • os.chdir() 修改当前工作目录

os.mkdir

创建文件目录。

In [4]: os.mkdir(os.path.join(os.path.abspath('.'), 'testdir'))

os.rmdir

删除文件目录。

In [6]: os.rmdir(os.path.join(os.path.abspath('.'), 'testdir'))

os.rename

重命名文件。如果文件不存在则报错

In [10]: os.rename('test.txt', 'test.py')

os.remove

删除文件,文件不存在时报错

In [13]: os.remove('test.py')

os.getcwd

显示当前程序的工作目录

In [2]: os.getcwd()
Out[2]: 'C:\\Users\\Administrator'

os.chdir

改变程序的工作目录

In [2]: os.getcwd()
Out[2]: 'C:\\Users\\Administrator'
In [3]: os.chdir('C:\\')
In [4]: os.getcwd()
Out[4]: 'C:\\'

2. sys模块

系统自身的一些操作

sys模块包括了一组非常实用的服务,内含很多函数方法和变量,用来处理Python运行时配置以及资源,从而可以与前当程序之外的系统环境交互,如:Python解释器。与os模块相比,其更多的在于针对系统环境的交互,而os则操作文件目录。

2.1 导入sys模块

首先,打开终端模拟器进入Python解释器或者打开IDE编辑器创建一个新的.py后缀名的Python程序文件。 下面,以解释器中的操作举例:

>>> import sys #导入sys模块
>>> dir(sys)     #dir()方法查看模块中可用的方法
2.2 sys模块常见函数

了解

  • sys.argv: 命令行参数,包括脚本名称,实现从程序外部向程序传递参数
  • sys.exit([arg]): 程序中间的退出,arg=0为正常退出
  • sys.path: 查找模块所在目录的目录名列表
  • sys.modules:映射模块名字到载入模块的字典
  • sys.platform: 获取当前系统平台
  • sys.stdin:标准输入流-一个类文件(file-like)对象
  • sys.stdout:标准输出流-一个类文件对象
  • sys.stderr:标准错误流-一个类文件对象
  • sys.getdefaultencoding(): 获取系统当前编码,一般默认为ascii。
  • sys.setdefaultencoding(): 设置系统默认编码,需要reload(sys)才能查询看到
  • sys.getfilesystemencoding(): 获取文件系统使用编码方式,Windows下返回’mbcs’,mac下返回’utf-8’
2.21 SYS.ARGV

sys.argv是命令行参数,包括脚本名称,它的功能可以实现从程序外部向程序传递参数。那么这个过程是如何实现的呢?假设有一个名为test.py的文件,则可以通过import sysprint sys.argv[number]两句来实现。number=0为这个脚本的名字,1,2,…则为命令行下传递的参数。

如test.py脚本内容如下:

import sysprint(sys.argv[0])
print(sys.argv[1])
print(sys.argv[2])
print(sys.argv[3])

那么要实现参数传递即可采用>>>python test.py arg1 arg2 arg3实现。下文会结合sys.path给出一个示例。上述命令的输出结果为:

test.py
arg1
arg2
arg3
2.22 SYS.EXIT([ARG])

执行至主程序的末尾时,解释器会自动退出。但如果需要中途退出程序,可以调用sys.exit()函数来实现。它带有一个可选的整数参数返回给调用它的程序。这意味着你可以在主程序中捕获对sys.exit()的调用。(0为正常退出,其他为不正常,可抛异常事件供捕获)

sys.exit()函数运行示例如下:

import syssys.exit(1) # 直接退出程序print('hello')
2.23 SYS.PATH

sys.path的功能是获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到。

示例:

In [1]: import sysIn [2]: sys.path
Out[2]:
['','C:\\paisen\\Anaconda3\\Scripts','C:\\paisen\\Anaconda3\\python36.zip','C:\\paisen\\Anaconda3\\DLLs','C:\\paisen\\Anaconda3\\lib','C:\\paisen\\Anaconda3','C:\\Users\\Administrator\\AppData\\Roaming\\Python\\Python36\\site-packages','C:\\paisen\\Anaconda3\\lib\\site-packages','C:\\paisen\\Anaconda3\\lib\\site-packages\\setuptools-39.1.0-py3.6.egg','C:\\paisen\\Anaconda3\\lib\\site-packages\\pip-10.0.1-py3.6.egg','C:\\paisen\\Anaconda3\\lib\\site-packages\\win32','C:\\paisen\\Anaconda3\\lib\\site-packages\\win32\\lib','C:\\paisen\\Anaconda3\\lib\\site-packages\\Pythonwin','C:\\paisen\\Anaconda3\\lib\\site-packages\\IPython\\extensions','C:\\Users\\Administrator\\.ipython']

可以采用sys.path.append("自定义模块路径")增加模块搜索路径(也可以用sys.path.insert进行列表插入)。以上列出的模块目录,在python执行import module_name时,会依次从上述列出的路径来搜索对应的模块。如有需要手动添加模块,可放入对应的路径中,如无必要建议不要手动添加路径。. 代表当前文件目录。

上问提到的sys.argv参数传递示例如下:

输入:

import sysprint('当前 Python PATH 路径有以下内容:')
for path in sys.path:print(path)

输出:

当前 Python PATH 路径有以下内容:
F:\进阶部分
F:\进阶部分
C:\paisen\Anaconda3\python36.zip
C:\paisen\Anaconda3\DLLs
C:\paisen\Anaconda3\lib
C:\paisen\Anaconda3
C:\Users\Administrator\AppData\Roaming\Python\Python36\site-packages
C:\paisen\Anaconda3\lib\site-packages
C:\paisen\Anaconda3\lib\site-packages\setuptools-39.1.0-py3.6.egg
C:\paisen\Anaconda3\lib\site-packages\pip-10.0.1-py3.6.egg
C:\paisen\Anaconda3\lib\site-packages\win32
C:\paisen\Anaconda3\lib\site-packages\win32\lib
C:\paisen\Anaconda3\lib\site-packages\Pythonwin
C:\Program Files\JetBrains\PyCharm 2018.2.5\helpers\pycharm_matplotlib_backend
2.24 SYS.MODULES

下面部分内容均为演示

sys.modules是一个全局字典,该字典是python启动后就加载在内存中。每当导入新的模块时,sys.modules将自动记录该模块。当第二次再导入该模块时,python会直接到字典中查找,从而加快了程序运行的速度。它拥有字典所拥有的一切方法。

示例:

import sysprint(sys.modules.keys())  # 列出所有的模块名
print(sys.modules['os'])  # 列出指定模块如os模块所在路径
print(sys.modules.values())  # 列出所有模块所在路径
2.25 SYS.PLATFORM

sys.platform语句用于查看当前平台,如win32、linux2等。

In [28]: sys.platform
Out[28]: 'win32'
2.26 标准数据流

sys.stdin/sys.stdout/sys.stderr变量包含与标准I/O流对应的流对象。如果需要更好地控制输出,而print不能满足你的要求,它们就是你所需要的。你也可以替换它们,这时候你就可以重定向输出和输入到其它设备( device ),或者以非标准的方式处理它们。

我们平时的输入输出方式通过input/print实现,即

print('Hello World!')
print('Hi, %s!' % input('Please enter your name:'))

上述中,键盘键入的信息则为标准输入,屏幕输出的结果则为标准输出。而上述的例子,与下文采用sys.stdin/sys.stdout的结果是一致的。

import syssys.stdout.write('Hello World!')print('请输入你的名字:')
name = sys.stdin.readline()[:-1]
print('Hi, %s!' % name)

输入for f in (sys.stdin, sys.stdout, sys.stderr): print(f)可查看属性信息。

In [4]: for f in (sys.stdin, sys.stdout, sys.stderr): print(f)
<_io.TextIOWrapper name='<stdin>' mode='r' encoding='UTF-8'>
<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>
<_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>

注:通过IPython输出结果与上述有所出入,但上述要表述的信息正确。

stdin/stdout/stderr在Python中都是文件属性的对象,在Python启动时自动与Shell 环境中的标准输入/输出/出错关联。与标准输出print和标准出错所不同的是,stdin/stdout/stderr三者不具备自动回车功能,而标准输入输出则默认自动加了回车。stdin只读,stdout和stderr只写。

使用sys重定向输出

代码如下:

print('Dive in')  # 标准输出
saveout = sys.stdout  # 终在重定向前保存stdout,这样的话之后你还可以将其设回正常
fsock = open('out.log', 'w')  # 打开一个新文件用于写入。如果文件不存在,将会被创建。如果文件存在,将被覆盖。
sys.stdout = fsock  # 所有后续的输出都会被重定向到刚才打开的新文件上。
print('This message will be logged instead of displayed')  # 这样只会将输出结果“打印”到日志文件中;屏幕上不会看到输出
sys.stdout = saveout  # 在我们将 stdout 搞乱之前,让我们把它设回原来的方式。
fsock.close()  # 关闭日志文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/13480.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

职责链模式

职责链模式 文章目录 职责链模式什么是职责链模式通过示例了解职责链模式 什么是职责链模式 职责链模式(Chain of Responsibility):使多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链&#xff0c;并沿着这条链传递该请…

微软中国 AI 团队搬至美国?可解决家属签证

多位网友爆料称&#xff0c;微软中国数百名员工收到公司邮件&#xff0c;询问是否愿意迁移至美国、澳大利亚、爱尔兰等国家工作。公司将负责亲属签证问题&#xff0c;以Azure云平台的AI团队为主&#xff0c;员工需要在6月7日前给出答复。 有微软员工表示情况属实&#xff0c;这…

文本三剑客-awk

一、awk的介绍 1.1awk的简介 AWK 是一种处理文本文件的语言&#xff0c;是一个强大的文本分析工具 可以在无交互的模式下实现复杂的文本操作 相较于sed常作用于一整个行的处理&#xff0c;awk则比较倾向于一行当中分成数个字段来处理&#xff0c;因为awk相当适合小型的文本…

IT行业现状与未来趋势:洞察变革的浪潮

IT行业现状与未来趋势&#xff1a;洞察变革的浪潮 一、引言 随着科技的飞速发展&#xff0c;IT行业已经成为推动全球经济和社会进步的重要力量。从云计算、大数据到人工智能、区块链&#xff0c;每一项技术的革新都在重塑着我们的生活方式和工作模式。本文将探讨当前IT行业的…

Synerg FATAL

Synerg FATAL Synerg使用存在的问题 Synerg使用存在的问题 FATAL: failed to start server: cannot bind address: The specified address is not available from the local machine启动失败的原因&#xff0c;先排除是否有中文路径和电脑IP与软件IP是否一致&#xff0c;用Syn…

什么是TCP协议,TCP协议存在哪些安全挑战

TCP作为是互联网中最重要的协议之一&#xff0c;随着网络技术的不断发展&#xff0c;TCP使用范围越来越广&#xff0c;TCP协议也面临着越来越多的安全挑战。下面我们就来探讨下什么是TCP协议&#xff0c;TCP协议存在哪些安全挑战。 一、了解TCP协议 TCP&#xff08;Transmissi…

AI大模型没那么神秘,3个超简单秘诀让你轻松上手!| 塑造AI时代新思维

01、国内的大模型超优秀 是不是听说ChatGPT的强大功能后&#xff0c;早就手痒了&#xff0c;可是受限于环境&#xff0c;在为无法使用而遗憾呢&#xff1f; 别急&#xff0c;我们国内的大模型也棒棒的&#xff0c;在中文领域已经超越了ChatGPT3.5&#xff0c;还是免费的&…

Python代码:九、十六进制数字的大小

1、题目 计算的世界&#xff0c;除了二进制与十进制&#xff0c;使用最多的就是十六进制了&#xff0c;现在使用input读入一个十六进制的数字&#xff0c;输出它的十进制数字是多少&#xff1f; 2、代码 import sysnum16 input() num10 int(num16,16) print(num10) 3、结…

域信息收集

文章目录 一、基础信息收集1、查看系统详细信息2、查看系统中是否存在杀软3、查看系统开启的服务3、其他命令 二、凭据信息收集2.1 wifi信息2.2 相关工具 三、横向信息收集 一、基础信息收集 收集版本、补丁、服务、任务、防护等。 1、查看系统详细信息 systeminfo # 查看系…

AI绘画原理及工具介绍

市面上的AI绘画工具是运用人工智能技术来辅助或自动完成绘画创作的工具。这些工具依托于深度学习和图像处理技术&#xff0c;能够学习和模仿人类绘画的风格和技巧&#xff0c;从而生成具有艺术感的图像。以下是关于市面上AI绘画工具的详细介绍&#xff1a; 一、原理 数据收集…

快手截流多功能协议引流多线程多账号使用

在市场上&#xff0c;类似的软件售价都在几千元&#xff0c;但我发现这款全新版本的软件已经更新&#xff0c;而且我只需要配合使用谷歌浏览器&#xff0c;稍微调慢一点延时&#xff0c;我就可以像专业人士一样流畅地进行操作。 评论对于我而言是一种艺术&#xff0c;而不仅仅是…

Elasticsearch:向量相似度技术和评分

作者&#xff1a;来自 Elastic Valentin Crettaz 当需要搜索自由文本并且 CtrlF / CmdF 不再有效时&#xff0c;使用词法搜索引擎通常是你想到的下一个合理选择。 词汇搜索引擎擅长分析要搜索的文本并将其标记为可在搜索时匹配的术语&#xff0c;但在理解和理解被索引和搜索的…

[Cocos Creator 3.5赛车游戏]第3节 新建项目

环境已经配置好&#xff0c;现在您将真正的开始开发您的项目&#xff0c;开发项目的第一步是新建项目。所以现在请关闭上一个步骤打开的Cocos Creator窗口&#xff0c;回到CocosDashboard&#xff0c;点击“新建”按钮&#xff1a; 选择“模板”选项卡&#xff0c;因为您即将开…

2024 Google I/O - 提前窥探 Android 15 的新功能与适配

今年年初就简单介绍过 Android 15 预览版 的相关内容&#xff0c;而昨天 Google I/O 宣布了 Android 15 Beta2&#xff0c;作为第二个 Beta 版本 &#xff0c;它已经基本接近它未来的样子&#xff0c;毕竟下个版本就是 Platform Stability 了&#xff0c;所以让我们提前来一睹 …

数字化转型浪潮下,低代码技术如何重塑保险行业?

保险行业进行数字化转型的必要性源于多个方面&#xff0c;随着科技的进步和互联网的普及&#xff0c;客户对保险服务的需求日益个性化和便捷化。他们期望能够随时随地在线购买保险、查询保单信息&#xff0c;并享受到快速、高效的理赔服务。数字化转型可以帮助保险公司满足这些…

docker容器与centos宿主机时间一致设置

1、查看宿主机的系统时间 date -R 2、进入到容器中查看容器系统时间 docker exec -it storage /bin/bash date -R 3、查看容器系统时区 cat /etc/timezone 4、查看宿主机所在时区 timedatectl 5、创建容器时间&#xff0c;并退出进入的容器 6、将宿主日期复制到容器内部&…

微信可以正常连接网络 浏览器访问不了外网

今天工作打开电脑&#xff0c;发现浏览器上不了网&#xff0c;百度都点不开。点击网络诊断&#xff0c;显示网络连接正常。重启了两次&#xff0c;浏览器还是连接不上外网。打开微信&#xff0c;微信还能正常使用。 仔细想一想&#xff0c;我昨天对电脑做了什么&#xff0c;特殊…

【漏洞复现】方正全媒体采编系统密码泄露漏洞

0x01 产品简介 方正全媒体新闻采编系统是一个面向媒体深度融合的技术平台&#xff0c;它以大数据和AI技术为支撑&#xff0c;集成了指挥中心、采集中心、编辑中心、发布中心、绩效考核中心、资料中心等多个功能&#xff0c;全面承载“策采编审发存传评”的融媒体业务流程。 0…

Block常见面试题精华版

block本质是什么&#xff0c;需要注意什么&#xff1f; Block 的本质是一个封装了函数和函数调用环境&#xff08;捕获的变量&#xff09;的 Objective-C 对象。Block 的实现基于 C 语言的函数指针&#xff0c;但它们比普通的函数指针更加强大&#xff0c;因为它们能够捕获周围…

纯血鸿蒙APP实战开发——Worker子线程中解压文件

介绍 本示例介绍在Worker 子线程使用ohos.zlib 提供的zlib.decompressfile接口对沙箱目录中的压缩文件进行解压操作&#xff0c;解压成功后将解压路径返回主线程&#xff0c;获取解压文件列表。 效果图预览 使用说明 点击解压按钮&#xff0c;解压test.zip文件&#xff0c;显…