首页 Python编程揭秘,一些你可能不知道的 Python命令总结

揭秘,一些你可能不知道的 Python命令总结

运维派隶属马哥教育旗下专业运维社区,是国内成立最早的IT运维技术社区,欢迎关注公众号:yunweipai
领取学习更多免费Linux云计算、Python、Docker、K8s教程关注公众号:马哥linux运维

1. 常用工具

1.1 读写 CSV 文件

import csv
# 无header的读写
with open(name, 'rt', encoding='utf-8', newline='') as f:  # newline=''让Python不将换行统一处理
    for row in csv.reader(f):
        print(row[0], row[1])  # CSV读到的数据都是str类型
with open(name, mode='wt') as f:
    f_csv = csv.writer(f)
    f_csv.writerow(['symbol', 'change'])

# 有header的读写
with open(name, mode='rt', newline='') as f:
    for row in csv.DictReader(f):
        print(row['symbol'], row['change'])
with open(name, mode='wt') as f:
    header = ['symbol', 'change']
    f_csv = csv.DictWriter(f, header)
    f_csv.writeheader()
    f_csv.writerow({'symbol': xx, 'change': xx})

注意,当 CSV 文件过大时会报错:_csv.Error: field larger than field limit (131072),通过修改上限解决

import sys
csv.field_size_limit(sys.maxsize)

csv 还可以读以 \t 分割的数据

f = csv.reader(f, delimiter='\t')

1.2 迭代器工具itertools 中定义了很多迭代器工具,例如子序列工具:

import itertools
itertools.islice(iterable, start=None, stop, step=None)
# islice('ABCDEF', 2, None) -> C, D, E, F

itertools.filterfalse(predicate, iterable)         # 过滤掉predicate为False的元素
# filterfalse(lambda x: x < 5, [1, 4, 6, 4, 1]) -> 6

itertools.takewhile(predicate, iterable)           # 当predicate为False时停止迭代
# takewhile(lambda x: x < 5, [1, 4, 6, 4, 1]) -> 1, 4

itertools.dropwhile(predicate, iterable)           # 当predicate为False时开始迭代
# dropwhile(lambda x: x < 5, [1, 4, 6, 4, 1]) -> 6, 4, 1

itertools.compress(iterable, selectors)            # 根据selectors每个元素是True或False进行选择
# compress('ABCDEF', [1, 0, 1, 0, 1, 1]) -> A, C, E, F

序列排序:

sorted(iterable, key=None, reverse=False)

itertools.groupby(iterable, key=None)              # 按值分组,iterable需要先被排序
# groupby(sorted([1, 4, 6, 4, 1])) -> (1, iter1), (4, iter4), (6, iter6)

itertools.permutations(iterable, r=None)           # 排列,返回值是Tuple
# permutations('ABCD', 2) -> AB, AC, AD, BA, BC, BD, CA, CB, CD, DA, DB, DC

itertools.combinations(iterable, r=None)           # 组合,返回值是Tuple
itertools.combinations_with_replacement(...)
# combinations('ABCD', 2) -> AB, AC, AD, BC, BD, CD

多个序列合并:

itertools.chain(*iterables)                        # 多个序列直接拼接
# chain('ABC', 'DEF') -> A, B, C, D, E, F

import heapq
heapq.merge(*iterables, key=None, reverse=False)   # 多个序列按顺序拼接
# merge('ABF', 'CDE') -> A, B, C, D, E, F

zip(*iterables)                                    # 当最短的序列耗尽时停止,结果只能被消耗一次
itertools.zip_longest(*iterables, fillvalue=None)  # 当最长的序列耗尽时停止,结果只能被消耗一次

1.3 计数器

计数器可以统计一个可迭代对象中每个元素出现的次数。

import collections
# 创建
collections.Counter(iterable)

# 频次
collections.Counter[key]                 # key出现频次
# 返回n个出现频次最高的元素和其对应出现频次,如果n为None,返回所有元素
collections.Counter.most_common(n=None)

# 插入/更新
collections.Counter.update(iterable)
counter1 + counter2; counter1 - counter2  # counter加减

# 检查两个字符串的组成元素是否相同
collections.Counter(list1) == collections.Counter(list2)

1.4 带默认值的 Dict

当访问不存在的 Key 时,defaultdict 会将其设置为某个默认值。

import collections
collections.defaultdict(type)  # 当第一次访问dict[key]时,会无参数调用type,给dict[key]提供一个初始值

1.5 有序 Dict

import collections
collections.OrderedDict(items=None)  # 迭代时保留原始插入顺序

2. 高性能编程和调试

2.1 输出错误和警告信息

向标准错误输出信息

import sys
sys.stderr.write('')

输出警告信息

import warnings
warnings.warn(message, category=UserWarning)  
# category的取值有DeprecationWarning, SyntaxWarning, RuntimeWarning, ResourceWarning, FutureWarning

控制警告消息的输出

$ python -W all     # 输出所有警告,等同于设置warnings.simplefilter('always')
$ python -W ignore  # 忽略所有警告,等同于设置warnings.simplefilter('ignore')
$ python -W error   # 将所有警告转换为异常,等同于设置warnings.simplefilter('error')

2.2 代码中测试

有时为了调试,我们想在代码中加一些代码,通常是一些 print 语句,可以写为:

# 在代码中的debug部分
if __debug__:
    pass

一旦调试结束,通过在命令行执行 -O 选项,会忽略这部分代码:

$ python -0 main.py

2.3 代码风格检查

使用 pylint 可以进行不少的代码风格和语法检查,能在运行之前发现一些错误

pylint main.py

2.4 代码耗时

耗时测试

$ python -m cProfile main.py

测试某代码块耗时

# 代码块耗时定义
from contextlib import contextmanager
from time import perf_counter

@contextmanager
def timeblock(label):
    tic = perf_counter()
    try:
        yield
    finally:
        toc = perf_counter()
        print('%s : %s' % (label, toc - tic))

# 代码块耗时测试
with timeblock('counting'):
    pass

代码耗时优化的一些原则

  • 专注于优化产生性能瓶颈的地方,而不是全部代码。
  • 避免使用全局变量。局部变量的查找比全局变量更快,将全局变量的代码定义在函数中运行通常会快 15%-30%。
  • 避免使用.访问属性。使用 from module import name 会更快,将频繁访问的类的成员变量 self.member 放入到一个局部变量中。
  • 尽量使用内置数据结构。str, list, set, dict 等使用 C 实现,运行起来很快。
  • 避免创建没有必要的中间变量,和 copy.deepcopy()。
  • 字符串拼接,例如 a + ‘:’ + b + ‘:’ + c 会创造大量无用的中间变量,’:’,join([a, b, c]) 效率会高不少。另外需要考虑字符串拼接是否必要,例如 print(‘:’.join([a, b, c])) 效率比 print(a, b, c, sep=’:’) 低。

3. Python 其他技巧

3.1 argmin 和 argmax

items = [2, 1, 3, 4]
argmin = min(range(len(items)), key=items.__getitem__)

argmax同理。

3.2 转置二维列表

A = [['a11', 'a12'], ['a21', 'a22'], ['a31', 'a32']]
A_transpose = list(zip(*A))  # list of tuple
A_transpose = list(list(col) for col in zip(*A))  # list of list

3.3 一维列表展开为二维列表

A = [1, 2, 3, 4, 5, 6]

# Preferred.
list(zip(*[iter(A)] * 2))

内容转自Python专栏

(如有侵权请联系删除)

今日福利

今天给大家分享一份Python程序员的圣经——《Python编程快速上手:让繁琐工作自动化》。这是本面向实践的Python编程实用指南。

如果你想改变现状,自学提升一下或者报课提升,可以给你一些学习干货。

资料获取:PDF已经打包好,可以通过下述步骤来获取,回复关键词:快速上手

揭秘,一些你可能不知道的 Python命令总结插图

目录

第一章 Python基础

第二章 控制流

第三章 函数

第四章 列表

第五章 字典和结构化数据

第六章 字符串操作

第七章 模式匹配与正则表达式

第八章 读写文件

第九章 组织文件

第十章 调试

第十一章 从Web抓取信息
第十二章 处理Excel电子表格

第十三章 处理PDF和Word文档

第十四章 处理CSV文件和JSON数据

第十五章 保持时间、计划任务和启动程序

第十六章 发送电子邮件和短信

第十七章 操作图像

第十八章 用GUI自动化控制键盘和鼠标

揭秘,一些你可能不知道的 Python命令总结插图1
揭秘,一些你可能不知道的 Python命令总结插图2

*声明:资料来自于网络,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜

第一章 Python基础

你可以用一个计算器来计算表达式,或在文本处理器中输入字符串连接。甚至可以通过复制粘贴文本,很容易地实现字符串复制。但是表达式以及组成它们的值(操作符、变量和函数调用),才是构成程序的基本构建块。一旦你知道如何处理这些元素,就能够用Python操作大量的数据。

揭秘,一些你可能不知道的 Python命令总结插图3

第二章 控制流

通过使用求值为True或False的表达式(也称为条件),你可以编写程序来决定哪些代码执行,哪些代码跳过。可以在循环中一遍又一遍地执行代码,只要某个条件求值为True。如果需要跳出循环或回到开始处,break和continue语句很有用。

揭秘,一些你可能不知道的 Python命令总结插图4

第三章 函数

函数是将代码逻辑分组的主要形式。因为函数中的变量存在于他们自己的局部作用域内,所以一个函数中的代码不能直接影响其他函数中变量的值。这限制了哪些代码才能改变变量的值,对于调试代码是很有帮助的。

揭秘,一些你可能不知道的 Python命令总结插图5

第四章 列表

列表是可变的,这意味着它们的内容可以改变。元组和字符串虽然在某些方面像列表,却是不可变的,不能被修改。

揭秘,一些你可能不知道的 Python命令总结插图6

第五章 字典和结构化数据

列表和字典是这样的值,它们可以包含多个值,包括其他列表和字典。字典是有用的,因为你可以把一些项(键)映射到另一些项(值),它不像列表,只包含一系列有序的值。字典中的值是通过方括号访问的,像列表一样。字典不是只能使用整数下标,而是可以用各种数据类型作为键:整型、浮点型、字符串或元组。

揭秘,一些你可能不知道的 Python命令总结插图7

第六章 字符串操作

文本是常见的数据形式,Python自带了许多有用的字符串方法,来处理保存在字符串中的文本。在你写的几乎每个Python程序中,都会用到取下标、切片和字符串方法。

揭秘,一些你可能不知道的 Python命令总结插图8

第七章 模式匹配与正则表达式

虽然计算机可以很快地查找文本,但你必须精确地告诉它要找什么。正则表达式让你精确地指明要找的文本模式。实际上,某些文字处理和电子表格应用提供了查找替换功能,让你使用正则表达式进行查找。

揭秘,一些你可能不知道的 Python命令总结插图9

第八章 读写文件

文件被组织在文件夹中(也称为目录),路径描述了一个文件的位置。运行在计算机上的每个程序都有一个当前工作目录,它让你相对于当前的位置指定文件路径,而非总是需要完整路径(绝对路径)。os.path模块包含许多函数,用于操作文件路径。

揭秘,一些你可能不知道的 Python命令总结插图10

第九章 组织文件

通常,你不仅需要对一个文件夹中的文件执行这些操作,而是对所有下级子文件夹执行操作。os.walk()函数将处理这个艰苦工作,遍历文件夹,这样你就可以专注于程序需要对其中的文件做什么。

揭秘,一些你可能不知道的 Python命令总结插图11

第十章 调试

断言、异常、日志和调试器,都是在程序中发现和预防缺陷的有用工具。用

Python语句实现的断言,是实现心智正常检查的好方式。如果必要的条件没有保持为True,它将尽早给出警告。断言所针对的错误,是程序不应该尝试恢复的,而是应该快速失败。否则,你应该抛出异常。

揭秘,一些你可能不知道的 Python命令总结插图12

回复关键词:快速上手

揭秘,一些你可能不知道的 Python命令总结插图13

目录

第十一章 从Web抓取信息

大多数无聊的任务并不限于操作你计算机中的文件。能够编程下载网页,可以让你的程序扩展到因特网。requests模块让下载变得很简单,加上HTML的概念和选择器的基本知识,你就可以利用BeautifulSoup模块,解析下载的网页。

揭秘,一些你可能不知道的 Python命令总结插图14

第十二章 处理Excel电子表格

处理信息是比较难的部分,通常不是处理本身难,而是为程序得到正确格式的数据较难。一旦你将电子表格载入Python,就可以提取并操作它的数据,比手工操作要快得多。

揭秘,一些你可能不知道的 Python命令总结插图15

第十三章 处理PDF和Word文档

文本信息不仅仅是纯文本文件,实际上,很有可能更经常遇到的是PDF和Word文档。可以利用PyPDF2模块来读写PDF文档。遗憾的是,从PDF文档读取文本并非总是能得到完美转换的字符串,因为PDF文档的格式很复杂,某些PDF可能根本读不出来。在这种情况下,你就不太走运了,除非将来PyPDF2更新,支持更多的PDF功能。

揭秘,一些你可能不知道的 Python命令总结插图16

第十四章 处理CSV文件和JSON数据

CSV和JSON是常见的纯文本格式,用于保存数据。它们很容易被程序解析,同时仍然让人可读,所以它们经常被用作简单的电子表格或网络应用程序的数据。csv和json模块大大简化了读取和写入CSV和JSON文件的过程。

揭秘,一些你可能不知道的 Python命令总结插图17

第十五章 保持时间、计划任务和启动程序

对于许多编程语言,包括Python,Unix纪元(1970年1月1日午夜,UTC)是一个标准的参考时间。虽然time.time()函数模块返回一个Unix纪元时间戳(也就是自Unix纪元以来的秒数的浮点值),但datetime模块更适合执行日期计算、格式化和解析日期信息的字符串。

揭秘,一些你可能不知道的 Python命令总结插图18

第十六章 发送电子邮件和短信

Python 的 smtplib 提供了一些函数,利用 SMTP,通过电子邮件提供商的SMTP服务器发送电子邮件。同样,第三方的imapclient和pyzmail模块让你访问IMAP服务器,并取回发送给你的电子邮件。虽然IMAP比SMTP复杂一些,但它也相当强大,允许你搜索特定电子邮件、下载它们、解析它们,提取主题和正文作为字符串值。

揭秘,一些你可能不知道的 Python命令总结插图19

第十七章 操作图像

图像由像素的集合构成,每个像素具有表示颜色的RGBA值,可以通过x和y坐标的定位。两种常见的图像格式是JPEG和PNG。Pillow模块可以处理这两种图像格式和其他格式。

揭秘,一些你可能不知道的 Python命令总结插图20

第十八章 用GUI自动化控制键盘和鼠标

利用pyautogui,你可以在屏幕上移动鼠标,模拟鼠标点击、击键和快捷键。pyautogui模块也能检查屏幕上的颜色,让GUI自动化程序对屏幕内容有足够的了解,知道它是否有偏差。甚至可以向它提供一个屏幕快照,让它找出你希望点击的区域坐标。

揭秘,一些你可能不知道的 Python命令总结插图21

本书适合任何想要通过Python学习编程的读者,尤其适合缺乏编程基础的初学者。通过阅读本书,读者将能利用强大的编程语言和工具,并且会体会到Python编程的快乐。

资料获取:PDF已经打包好,可以通过下述步骤来获取,回复关键词:快速上手

揭秘,一些你可能不知道的 Python命令总结插图22

本文链接:https://www.yunweipai.com/46743.html

网友评论comments

发表回复

您的电子邮箱地址不会被公开。

暂无评论

Copyright © 2012-2022 YUNWEIPAI.COM - 运维派 京ICP备16064699号-6
扫二维码
扫二维码
返回顶部