【python】标准库(第四讲)

简介: 在 Python 被安装的时候,就有不少模块也随着安装到本地的计算机上了。这些东西就如同“能源”、“电力”一样,让 Python 拥有了无限生机,能够非常轻而易举地免费使用很多模块。所以,称之为“自带电池”。它们被称为“标准库”。...

🍁作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道TOP1🏅 阿里云ACE认证高级工程师🏅

✒️个人主页:小鹏linux

💊个人社区:小鹏linux(个人社区)欢迎您的加入!

image.gif

目录

1. tempfifile

2. os.path

3.OS之常⽤函数列表:

4. OS之文件和目录属性

5. OS之操作命令

👑👑👑结束语👑👑👑


1. tempfifile

Python 对临时⽂件的⽀持算是我所⻅过语⾔中最丰富的。通常建议使⽤ NamedTemporaryFile,其他可以忽略。

        • TemporaryFile: 创建临时⽂件对象,关闭时⾃动删除。

        • NamedTemporaryFile: 创建临时⽂件对象,可获取⽂件名,参数决定是否⾃动删除。

        • SpooledTemporaryFile: 和 TemporaryFile 类似,只有在数据超过阈值时,才写⼊硬盘

>>> import tempfile, os.path
>>> tmp = tempfile.NamedTemporaryFile()
>>> tmp.name
'/var/folders/r2/4vkjhz6s6lz02hk6nh2qb99c0000gn/T/tmpYYB6p3'
>>> os.path.exists(tmp.name)
True
>>> tmp.close()
>>> os.path.exists(tmp.name)
False

image.gif

默认使⽤系统临时⺫录和前缀,当然也可以指定不同的配置。

>>> with tempfile.NamedTemporaryFile(prefix = "xxx_", suffix = ".tmp", dir = ".") as f:
... print f.name
... 
/Users/yuhen/test/xxx_SL3apY.tmp

image.gif

与临时⽂件有关的函数还有:

        • tempfifile.gettempdir: 返回系统临时⽂件存放路径。

        • tempfifile.gettempprefifix: 返回默认的临时⽂件名前缀。

        • tempfifile.mkdtemp: 创建临时⺫录。

        • tempfifile.mkstemp: 创建临时⽂件,返回描述符和⽂件名,需⼿⼯删除。

        • os.tempnam: 仅返回有效的临时⽂件名,并不创建⽂件。

        • os.tmpfifile(): 创建临时⽂件对象,关闭后⾃动删除。

>>> tempfile.gettempdir()
'/var/folders/r2/4vkjhz6s6lz02hk6nh2qb99c0000gn/T'
>>> tempfile.gettempprefix()
'tmp'

image.gif

>>> d = tempfile.mkdtemp(); d
'/var/folders/r2/4vkjhz6s6lz02hk6nh2qb99c0000gn/T/tmpE_bRWd'
>>> os.path.exists(d)
True
>>> os.removedirs(d)

image.gif

>>> fd, name = tempfile.mkstemp()
>>> os.write(fd, "123\n")
4
>>> os.close(fd)
>>> os.path.exists(name)
True
>>> os.remove(name)

image.gif

2. os.path

常⽤函数列表:

函数

说明

abspath

绝对路径。

relpath

相对路径。

realpath

符号链接的真实路径。

normpath

将拼接的路径还原成正常样式。

basename

⽂件名。以 / 结尾的路径,返回空。

dirname

目录名。

commonprefifix       

多个路径的共有⽗目录。

exists

判断路径是否存在,失效符号链接返回 False

lexists

判断符号连接⽂件⾃⾝是否存在。

expanduser

展开⽤户根目录 ~ 开始的路径。

expandvars

展开路径中的环境变量。如: ${name} Windows %name%

getatime

最后访问时间。通常指读操作

getmtime

最后修改时间。

getctime

Windows 返回创建时间,Linux 返回属性更新时间。

getsize

⽂件⼤⼩。

isabs

判断是否绝对路径。

isdir

判断是否目录。

isfifile

判断是否⽂件。

islink

判断是否符号链接。

ismount

判断是否载⼊点。

split

将路径分解成 (目录, ⽂件名)

splitext

将路径分解成 (目录/主⽂件名,扩展名)

join

拼接路径。

拼接的目录看上乱糟糟让⼈烦⼼。

>>> os.path.normpath("./../a/b/../c")
'../a/c'

image.gif

展开⽤户根路径,或者包含系统环境变量的路径。

>>> os.path.expanduser("~/.vimrc")
'/Users/yuhen/.vimrc'
>>> os.path.expandvars("$HOME/.vimrc")
'/Users/yuhen/.vimrc'

image.gif

除⾮只要扩展名,否则还是先⽤ basename 将路径去掉。

>>> os.path.splitext(os.path.basename("/usr/local/lib/libevent.a"))
('libevent', '.a')

image.gif

3.OS之常⽤函数列表:

函数

说明

chdir

修改⼯作目录。

getcwd

获取⼯作目录。

listdir

获取目录下所有成员,不⽀持递归和通配符。

walk

深度遍历所有⼦目录成员。

mkdir

创建⼦目录。如目标已存在,异常。

makedirs

递归创建多级⼦目录。

rmdir

删除空目录。

removedirs            

递归删除目录中所有深度⼦目录。如⾮空则抛出异常。

remove 

删除⽂件,如果是目录则抛出异常。

rename

重命名。如⺫标目录已存在,抛出异常。如果目标是⽂件,覆盖。

renames

重命名,必要的话会创建目标路径。

chmod

修改权限。lchmod 修改符号⽂件本⾝。

chown

修改拥有⼈。lchown 修改符号⽂件本⾝。

access

权限测试。

link

创建符号链接。

symlink

创建符号链接。

readlink

获取符号链接指向的⺫标。

unlink

解除链接。

stat

获取⽂件属性。lstat 返回符号⽂件本⾝属性。

迭代 walk,返回 "(路径,⼦⺫录列表,⽂件列表)",可配合 fnmatch 做通配符过滤。

>>> for path, dirs, files in os.walk("."):
... for f in files:
... if fnmatch.fnmatch(f, "*.py"):
... print os.path.join(path, f)
./main.py
./bak/amqplib_test.py
./bak/eventlet_test.py
./bak/extract_text.py
./bak/fabric_test.py

image.gif

如果仅操作当前目录,可以⽤ glob 代替 listdir,前者⽀持通配符。

>>> glob.glob("./bak/[rs]*.py")! ! ! ! # 迭代器版本: iglob
['./bak/redis_test.py', './bak/socket_test.py']

image.gif

如目录中还有⽂件存在,removedirs 会抛出异常。建议⽤ shutil.rmtree() 代替,注意参数区别。
>>> os.makedirs("./a/b/c")
>>> open("./a/b/c/test.txt", "w").write("abc")
>>> os.removedirs("./a/b/c")
OSError: [Errno 66] Directory not empty: './a/b/c'
>>> import shutil
>>> shutil.rmtree("./a")

image.gif

某些时候,需要先测试⽂件是否拥有某些权限。

>>> os.access("a.txt", os.W_OK)
True

image.gif

都是哪些⼈需要修改⽂件时间?

>>> !stat -x a.txt
 File: "a.txt"
 Size: 0 FileType: Regular File
 Mode: (0644/-rw-r--r--) Uid: ( 501/ yuhen) Gid: ( 20/ staff)
Device: 1,2 Inode: 5111644 Links: 1
Access: Mon Mar 25 17:43:01 2013
Modify: Mon Mar 25 17:43:01 2013
Change: Mon Mar 25 17:43:01 2013
>>> atime = time.mktime(datetime.datetime(2010, 10, 1).utctimetuple())
>>> mtime = time.mktime(datetime.datetime(2010, 11, 2).utctimetuple())
>>> os.utime("a.txt", (atime, mtime))
>>> os.stat("a.txt").st_atime == atime
True

image.gif

获取⽂件权限信息时,别忘了转换成⼋进制。

>>> oct(os.stat("a.txt").st_mode)
'0100644'

image.gif

4. OS之文件和目录属性

不管是在什么操作系统,都能看到文件或者目录的有关属性,那么,在 os 模块中,也有这样的一个方法:os.stat()

>>> p = os.getcwd() #当前目录
>>> p
'/home/qw/Documents/VBS/StarterLearningPython'
# 这个目录的有关信息
>>> os.stat(p)
posix.stat_result(st_mode=16895, st_ino=4L, st_dev=26L, st_nlink=1, st_uid=0, st_gid=0, st_size=12288L, st_atime=1430224935, st_mtime=1430224935, st_ctime=1430224935)
# 指定一个文件
>>> pf = p + "/README.md"
# 此文件的信息
>>> os.stat(pf)
posix.stat_result(st_mode=33279, st_ino=67L, st_dev=26L, st_nlink=1, st_uid=0, st_gid=0, st_size=50L, st_atime=1429580969, st_mtime=1429580969, st_ctime=1429580969)

image.gif

从结果中看,可能看不出什么来,先不用着急。这样的结果是对 computer 友好的,对大家可能不友好.如果用下面的方法,就友好多了:

>>> fi = os.stat(pf)
>>> mt = fi[8]

image.gif

fi[8] 就是 st_mtime 的值,它代表最后 modified(修改)文件的时间。看结果:

>>> mt
1429580969

image.gif

还是不友好。下面就用 time 模块来友好一下:

>>> import time
>>> time.ctime(mt)
'Tue Apr 21 09:49:29 2015

image.gif

现在就对大家友好了。

os.stat() 能够查看文件或者目录的属性。如果要修改呢?比如在部署网站的时候,常常要修改目录或者文件的权限等。这种操作在 Python 的 os 模块能做到吗?

要求越来越多了。在一般情况下,不在 Python 里做这个呀。当然,世界是复杂的。肯定有人会用到的,所以 os模块提供了 os.chmod()

5. OS之操作命令

大家如果使用某种 linux 系统,或者曾经用过 dos(恐怕很少),或者再 windows 里面用过 command,对敲 命令都不陌生。通过命令来做事情的确是很酷的。比如,我是在 linux 中,要查看文件和目录,只需要 ls 就 足够了。我并不是否认图形界面,而是在某些情况下,还是离不开命令的,比如用程序来完成查看文件和目录的操作。所以,os 模块中提供了这样的方法,许可程序员在 Python 程序中使用操作系统的命令。(以下是在 linux 系统,如果大家是 windows,可以将命令换成 DOS 命令。)

>>> p
'/home/qw/Documents/VBS/StarterLearningPython'
>>> command = "ls " + p
>>> command
'ls /home/qw/Documents/VBS/StarterLearningPython'

image.gif

为了输入方便,我采用了前面例子中已经有的那个目录,并且,用拼接字符串的方式,将要输入的命令(查看某文件夹下的内容)组装成一个字符串,赋值给变量 command,然后:

>>> os.system(command)
01.md 101.md 105.md 109.md 113.md 117.md 121.md 125.md 129.md 201.md 205.md 209.md 213.md 217.md 221.md index.md
02.md 102.md 106.md 110.md 114.md 118.md 122.md 126.md 130.md 202.md 206.md 210.md 214.md 218.md 222.md n001.md
03.md 103.md 107.md 111.md 115.md 119.md 123.md 127.md 1code 203.md 207.md 211.md 215.md 219.md 2code README.md
0images 104.md 108.md 112.md 116.md 120.md 124.md 128.md images 204.md 208.md 212.md 216.md 220.md images
0

image.gif

这样就列出来了该目录下的所有内容。

需要注意的是, os.system() 是在当前进程中执行命令,直到它执行结束。如果需要一个新的进程,可以使用 os.exec 或者 os.execvp 。对此有兴趣详细了解的兄弟,可以查看帮助文档了解。另外, os.system() 是通过shell 执行命令,执行结束后将控制权返回到原来的进程,但是 os.exec() 及相关的函数,则在执行后不将控 制权返回到原继承,从而使 Python 失去控制。

关于 Python 对进程的管理,此处暂不过多介绍。


os.system() 是一个用途不少的函数。曾有一个朋友网上询问,用它来启动浏览器。不过,这个操作的确要非常仔细。为什么呢?演示一下就明白了。

>>> os.system("/usr/bin/firefox")
(process:4002): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
(firefox:4002): GLib-GObject-WARNING **: Attempt to add property GnomeProgram::sm-connect after class was initialised
......

image.gif

我是在 linux上操作的,浏览器的地址是 /usr/bin/firefox ,可是,那个朋友是 windows,他就要非常小心了,因为在 windows 里面,表示路径的斜杠是跟上面显示的是反着的,可是在 Python 中 \ 这种斜杠代表转

义。解决这个问题可以参看我之前写的一篇文章【python】OS模块的用法及python换行符问题的原始字符串讲述。比较简单的一个方法用r"c:\user\firfox.exe" 的样式,因为在 r" " 中的,都是被认为原始字符了。还没完,因为 windows 系统中,一般情况下那个文件不是安装在我演示的那个简单样式的文件夹中,而是 C:\Program Files ,这中间还有空格,所以还要注意,空格问题。简直有点晕头转向了。大家按照这些提示,看看能不能完成用 os.system() 启动 firefox 的操作呢?

凡事感觉麻烦的东西,必然有另外简单的来替代。于是又有了一个 webbrowser 模块。可以专门用来打开指定网页。

>>> import webbrowser
>>> webbrowser.open("http://www.itdiffer.com")
True

image.gif

不管是什么操作系统,只要如上操作就能打开网页了。

真是神奇的标准库,有如此多的工具,能不加速开发进程吗?能不降低开发成本吗?“人生苦短,我用 Python”!

👑👑👑结束语👑👑👑

image.gif


目录
相关文章
|
3天前
|
调度 开发者 Python
Python中的异步编程:理解asyncio库
在Python的世界里,异步编程是一种高效处理I/O密集型任务的方法。本文将深入探讨Python的asyncio库,它是实现异步编程的核心。我们将从asyncio的基本概念出发,逐步解析事件循环、协程、任务和期货的概念,并通过实例展示如何使用asyncio来编写异步代码。不同于传统的同步编程,异步编程能够让程序在等待I/O操作完成时释放资源去处理其他任务,从而提高程序的整体效率和响应速度。
|
6天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
23 0
|
5天前
|
数据采集 JSON 测试技术
Python爬虫神器requests库的使用
在现代编程中,网络请求是必不可少的部分。本文详细介绍 Python 的 requests 库,一个功能强大且易用的 HTTP 请求库。内容涵盖安装、基本功能(如发送 GET 和 POST 请求、设置请求头、处理响应)、高级功能(如会话管理和文件上传)以及实际应用场景。通过本文,你将全面掌握 requests 库的使用方法。🚀🌟
24 7
|
21天前
|
网络协议 数据库连接 Python
python知识点100篇系列(17)-替换requests的python库httpx
【10月更文挑战第4天】Requests 是基于 Python 开发的 HTTP 库,使用简单,功能强大。然而,随着 Python 3.6 的发布,出现了 Requests 的替代品 —— httpx。httpx 继承了 Requests 的所有特性,并增加了对异步请求的支持,支持 HTTP/1.1 和 HTTP/2,能够发送同步和异步请求,适用于 WSGI 和 ASGI 应用。安装使用 httpx 需要 Python 3.6 及以上版本,异步请求则需要 Python 3.8 及以上。httpx 提供了 Client 和 AsyncClient,分别用于优化同步和异步请求的性能。
python知识点100篇系列(17)-替换requests的python库httpx
|
5天前
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
16 3
|
8天前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
27 5
|
7天前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
19 1
|
16天前
|
数据可视化 数据挖掘 Python
Seaborn 库创建吸引人的统计图表
【10月更文挑战第11天】本文介绍了如何使用 Seaborn 库创建多种统计图表,包括散点图、箱线图、直方图、线性回归图、热力图等。通过具体示例和代码,展示了 Seaborn 在数据可视化中的强大功能和灵活性,帮助读者更好地理解和应用这一工具。
30 3
|
5天前
|
文字识别 自然语言处理 API
Python中的文字识别利器:pytesseract库
`pytesseract` 是一个基于 Google Tesseract-OCR 引擎的 Python 库,能够从图像中提取文字,支持多种语言,易于使用且兼容性强。本文介绍了 `pytesseract` 的安装、基本功能、高级特性和实际应用场景,帮助读者快速掌握 OCR 技术。
25 0
|
30天前
|
Shell Python
Python 的 os 库的应用实例
Python 的 os 库的应用实例