python函数库_10. 标准库简介

10.标准库简介¶

10.1.操作系统接口¶

os 模块提供了许多与操作系统交互的函数:

>>>import os

>>>os.getcwd() # Return the current working directory

'C:\\Python39'

>>>os.chdir('/server/accesslogs') # Change current working directory

>>>os.system('mkdir today') # Run the command mkdir in the system shell

0

一定要使用 import os 而不是 from os import * 。这将避免内建的 open() 函数被 os.open() 隐式替换掉,因为它们的使用方式大不相同。

内置的 dir() 和 help() 函数可用作交互式辅助工具,用于处理大型模块,如 os:

>>>import os

>>>dir(os)

>>>help(os)

对于日常文件和目录管理任务, shutil 模块提供了更易于使用的更高级别的接口:

>>>import shutil

>>>shutil.copyfile('data.db', 'archive.db')

'archive.db'

>>>shutil.move('/build/executables', 'installdir')

'installdir'

10.2.文件通配符¶

glob 模块提供了一个在目录中使用通配符搜索创建文件列表的函数:

>>>import glob

>>>glob.glob('*.py')

['primes.py', 'random.py', 'quote.py']

10.3.命令行参数¶

通用实用程序脚本通常需要处理命令行参数。这些参数作为列表存储在 sys 模块的 argv 属性中。例如,以下输出来自在命令行运行 python demo.py one two three

>>>import sys

>>>print(sys.argv)

['demo.py', 'one', 'two', 'three']

argparse 模块提供了一种更复杂的机制来处理命令行参数。 以下脚本可提取一个或多个文件名,并可选择要显示的行数:

import argparse

parser = argparse.ArgumentParser(prog = 'top',

description = 'Show top lines from each file')

parser.add_argument('filenames', nargs='+')

parser.add_argument('-l', '--lines', type=int, default=10)

args = parser.parse_args()

print(args)

当在通过 python top.py --lines=5 alpha.txt beta.txt 在命令行运行时,该脚本会将 args.lines 设为 5 并将 args.filenames 设为 ['alpha.txt', 'beta.txt']。

10.4.错误输出重定向和程序终止¶

sys 模块还具有 stdin , stdout 和 stderr 的属性。后者对于发出警告和错误消息非常有用,即使在 stdout 被重定向后也可以看到它们:

>>>sys.stderr.write('Warning, log file not found starting a new one\n')

Warning, log file not found starting a new one

终止脚本的最直接方法是使用 sys.exit() 。

10.5.字符串模式匹配¶

re 模块为高级字符串处理提供正则表达式工具。对于复杂的匹配和操作,正则表达式提供简洁,优化的解决方案:

>>>import re

>>>re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')

['foot', 'fell', 'fastest']

>>>re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')

'cat in the hat'

当只需要简单的功能时,首选字符串方法因为它们更容易阅读和调试:

>>>'tea for too'.replace('too', 'two')

'tea for two'

10.6.数学¶

math 模块提供对浮点数学的底层C库函数的访问:

>>>import math

>>>math.cos(math.pi / 4)

0.70710678118654757

>>>math.log(1024, 2)

10.0

random 模块提供了进行随机选择的工具:

>>>import random

>>>random.choice(['apple', 'pear', 'banana'])

'apple'

>>>random.sample(range(100), 10) # sampling without replacement

[30, 83, 16, 4, 8, 81, 41, 50, 18, 33]

>>>random.random() # random float

0.17970987693706186

>>>random.randrange(6) # random integer chosen from range(6)

4

statistics 模块计算数值数据的基本统计属性(均值,中位数,方差等):

>>>import statistics

>>>data = [2.75, 1.75, 1.25, 0.25, 0.5, 1.25, 3.5]

>>>statistics.mean(data)

1.6071428571428572

>>>statistics.median(data)

1.25

>>>statistics.variance(data)

1.3720238095238095

SciPy项目 有许多其他模块用于数值计算。

10.7.互联网访问¶

有许多模块可用于访问互联网和处理互联网协议。其中两个最简单的 urllib.request 用于从URL检索数据,以及 smtplib 用于发送邮件:

>>>from urllib.request import urlopen

>>>with urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl') as response:

... for line in response:

... line = line.decode('utf-8') # Decoding the binary data to text.

... if 'EST' in line or 'EDT' in line: # look for Eastern Time

... print(line)


Nov. 25, 09:43:32 PM EST

>>>import smtplib

>>>server = smtplib.SMTP('localhost')

>>>server.sendmail('soothsayer@example.org', 'jcaesar@example.org',

..."""To: jcaesar@example.org

...From: soothsayer@example.org

...

...Beware the Ides of March.

...""")

>>>server.quit()

(请注意,第二个示例需要在localhost上运行的邮件服务器。)

10.8.日期和时间¶

datetime 模块提供了以简单和复杂的方式操作日期和时间的类。虽然支持日期和时间算法,但实现的重点是有效的成员提取以进行输出格式化和操作。该模块还支持可感知时区的对象。

>>># dates are easily constructed and formatted

>>>from datetime import date

>>>now = date.today()

>>>now

datetime.date(2003, 12, 2)

>>>now.strftime("%m-%d-%y.%d%b %Y is a %A on the%dday of %B.")

'12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'

>>># dates support calendar arithmetic

>>>birthday = date(1964, 7, 31)

>>>age = now - birthday

>>>age.days

14368

10.9.数据压缩¶

常见的数据存档和压缩格式由模块直接支持,包括:zlib, gzip, bz2, lzma, zipfile 和 tarfile。:

>>>import zlib

>>>s = b'witch which has which witches wrist watch'

>>>len(s)

41

>>>t = zlib.compress(s)

>>>len(t)

37

>>>zlib.decompress(t)

b'witch which has which witches wrist watch'

>>>zlib.crc32(s)

226805979

10.10.性能测量¶

一些Python用户对了解同一问题的不同方法的相对性能产生了浓厚的兴趣。 Python提供了一种可以立即回答这些问题的测量工具。

例如,元组封包和拆包功能相比传统的交换参数可能更具吸引力。timeit 模块可以快速演示在运行效率方面一定的优势:

>>>from timeit import Timer

>>>Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()

0.57535828626024577

>>>Timer('a,b = b,a', 'a=1; b=2').timeit()

0.54962537085770791

与 timeit 的精细粒度级别相反, profile 和 pstats 模块提供了用于在较大的代码块中识别时间关键部分的工具。

10.11.质量控制¶

开发高质量软件的一种方法是在开发过程中为每个函数编写测试,并在开发过程中经常运行这些测试。

doctest 模块提供了一个工具,用于扫描模块并验证程序文档字符串中嵌入的测试。测试构造就像将典型调用及其结果剪切并粘贴到文档字符串一样简单。这通过向用户提供示例来改进文档,并且它允许doctest模块确保代码保持对文档的真实:

def average(values):

"""Computes the arithmetic mean of a list of numbers.

>>> print(average([20, 30, 70]))

40.0

"""

return sum(values) / len(values)

import doctest

doctest.testmod() # automatically validate the embedded tests

unittest 模块不像 doctest 模块那样易于使用,但它允许在一个单独的文件中维护更全面的测试集:

import unittest

class TestStatisticalFunctions(unittest.TestCase):

def test_average(self):

self.assertEqual(average([20, 30, 70]), 40.0)

self.assertEqual(round(average([1, 5, 7]), 1), 4.3)

with self.assertRaises(ZeroDivisionError):

average([])

with self.assertRaises(TypeError):

average(20, 30, 70)

unittest.main() # Calling from the command line invokes all tests

10.12.自带电池¶

Python有“自带电池”的理念。通过其包的复杂和强大功能可以最好地看到这一点。例如:

xmlrpc.client 和 xmlrpc.server 模块使远程过程调用的实现几近轻松。 尽管模块名称中有 xml 字样,但用户不需要直接了解或处理 XML。

email 包是一个用于管理电子邮件的库,包括MIME和其他:基于 RFC 2822 的邮件文档。与 smtplib 和 poplib 实际上发送和接收消息不同,电子邮件包具有完整的工具集,用于构建或解码复杂的消息结构(包括附件)以及实现互联网编码和标头协议。

json 包为解析这种流行的数据交换格式提供了强大的支持。 csv 模块支持以逗号分隔值格式直接读取和写入文件,这些格式通常由数据库和电子表格支持。 XML处理由 xml.etree.ElementTree , xml.dom 和 xml.sax 包支持。这些模块和软件包共同大大简化了Python应用程序和其他工具之间的数据交换。

sqlite3 模块是SQLite数据库库的包装器,提供了一个可以使用稍微非标准的SQL语法更新和访问的持久数据库。

国际化由许多模块支持,包括 gettext , locale ,以及 codecs 包。

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

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

相关文章

LaTeX表格字太贴近上面表线

如图所示,默认情况下有时候会出现表格中的字太贴近上面表线的问题: 解决方法:在\begin{tabular}{c|cc|cc|cc}命令前面加一句\renewcommand{\arraystretch}{1.5} 效果如图: \renewcommand{\arraystretch}{number}命令可以调整表线和…

造出世界最大芯片的公司,Cerebras Systems到底是怎样的存在?

来源:TechSugar最近,一颗巨型芯片的诞生引爆了芯片圈。其面积42225 平方毫米,拥有1.2 万亿个晶体管,400000 个核心,片上内存18G字节,内存带宽19PByte/s,fabric带宽100Pbit/s。是目前芯片面积最大…

java乱码问题总结

在基于Java的编程中,经常会碰到汉字的处里及显示的问题,比如一大堆乱码或问号。 这是因为JAVA中默认的编码方式是UNICODE,而中国人通常使用的文件和DB都是基于GB2312或者BIG5等编码,故会出现此问题。以前我一般都是保证当前页与目…

matplotlib设置colorbar字体大小

只需在前面加一句 plt.rcParams[font.size] 13

python函数type的用意_python中type()是什么意思

type()是一个内建的获取变量类型的函数。 type()函数有两个用法,当只有一个参数的时候,返回对象的类型。当有三个参数的时候返回一个类对象。 语法:type(object) type(name, bases, dict) 具体用法: 一个参数type(object) 返回一个…

西方哲学史中49位哲学家的核心思想

来源:哲学与艺术泰勒斯——水是万物的始基这一命题开创了人类认识的一个新时代,拉开了从哲学的角度审视世界的大幕。阿那克西曼德——世界源于无定阿那克西曼德生于米利都,是泰勒斯的追随者和最出色的学生。阿那克西米尼——世界源于无限的空…

将ANSYS里的数据导入MATLAB的步骤

将ANSYS里的数据导入MATLAB的步骤: 1、在ansys中定义一个矩阵用来存储数据 *get,NodeNum,NODE,0,COUNT !得到模型的所有节点数 *get,nd,NODE,0,NUM,MIN !得到模型的最小节点编号 *dim,nodes,array,NodeNum !定义一个存储节点的数组 *dim,xyz,array,NodeNum,3 !定义…

第七章 异常总结

代码部分: public class Test1 {public static void main(String[] args) {try {div(1);System.out.println("正常输出结束");} catch (Exception e) {System.out.println("捕获异常");// TODO: handle exception}}public static void div(int num) throws…

latex在论文中添加行号

如果想全文连续编号 \usepackage[switch]{lineno} % 里面的选项代表双栏 \begin{document} % 文章开始 \linenumbers % 开始编号\nolinenumbers % 结束编号,若要全文编号,该条命令可不加 如果想要每页重新编号 \usepackage{lineno}…

python实战项目书 题库系统_Python实战视频教程_基于Python项目与面试题实例讲解(进阶训练篇)...

课程介绍: 精选50个Python项目实战与面试容易遇到的问题作为训练任务,每个任务都先提出问题,分析问题、然后给出巧妙与高效的解决办法,最后手把手代码实战完成任务,带你全面提升python项目实战核心技能与高效编程技巧.…

发表了一篇英文长文:语义信息G理论和逻辑贝叶斯推理for统计学习

来源:人机与认知实验室【本文是鲁晨光老师发表的一篇关于语义信息论和统计学习的论文写后感,发表在科学网上,特摘录推荐】2019-8-21 01:04 |个人分类:信息的数学和哲学|系统分类:论文交流| 信息论, 语义信息, 机器学习, 归纳, 科学哲学这是我…

Excel数据导入matlab

如果想要从Excel导入数据,那么就要用到xlsread函数。 具体如下: filename‘E:\数据\test.xlsx’; sheet3; xlRange‘C:E’; subsetAxlsread(filename,sheet,xlRange);%这样导入没有标题名字 其中sheet3;这里的3代表的是sheet从左到由的顺序&#xff0c…

Win7x64_chromeX86_相关路径

1、 C:\Users\33\AppData\Local\Google 里面有2个文件夹:“Chrome”、“CrashReports” 2、 C:\Program Files (x86)\Google 里面有3个文件夹:“Chrome”、“CrashReports”、“Update” 3、 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Goog…

win10下安装和卸载Ubuntu双系统

记录一下我装Ubuntu的过程,可能这不是最详细和最好的教程 首先下载diskgenius软件进行磁盘分区https://www.diskgenius.cn/ 在C盘下分出500M用于安装Ubuntu的启动项 在D盘下分出100G(根据个人需要)用于安装Ubuntu 之后对分出的区进行删除卷操…

跟我学《JavaScript高程3》第一讲,视频课程,课程笔记

跟我学《JavaScript高程3》 第一讲:第1~3章 课程制作:bling,兴哥,5年Java,3年前端 课程知识:JavaScript、Html、Css 课程目标:前端体系课程,逐步深入,找到一份前端工作 …

2019年美国国家人工智能战略报告(中文翻译版)

来源:网络大数据人工智能(AI)拥有巨大的希望,几乎可以使社会的各个方面受益,包括经济,医疗保健, 安全,法律,运输,甚至技术本身。2019年2月11日,总统签署了行政命令13859…

windows10和ubuntu双系统win10时间不正确

在win10上安装Ubuntu后,发现win10的时间不正确 解决方法: sudo apt-get install ntpdate sudo ntpdate time.windows.com sudo hwclock --localtime --systohc

python提取txt数据到excel_python 读取txt中每行数据,并且保存到excel中的实例

使用xlwt读取txt文件内容,并且写入到excel中,代码如下,已经加了注释。 代码简单,具体代码如下: # codingutf-8main function:主要实现把txt中的每行数据写入到excel中################# #第一次执行的代码 import xlwt…

python爬取知网论文信息

用Python爬取指望关于某个主题的所有论文摘要等信息。 很幸运的找到了一个大佬的代码来自己改改改! 先放大佬代码连接 Git 接下来就是我自己嚯嚯嚯改的,很小白的了。。。 应该是很详细得了 为了看懂这个代码, 我先看了另外一个大佬的比较一点…

c++如何让字符串重复输出_python编程入门八:列表、元组、字符串的转换及补充方法...

在python中,包括我们之前已经讲过列表、元组及字符串的一些用法了,大家应该可以感觉到,这三种“数据类型”还是有很多相同之处的,所以python中也可以轻易的实现三种类型之间的转换,当然本篇文章还会补充和它们相关的一…