写点什么

Python 标准库中隐藏的利器

作者:EquatorCoco
  • 2023-11-13
    福建
  • 本文字数:3389 字

    阅读完需:约 11 分钟

Python 安装之后,其标准库中有的模块,不一定要通过代码来引用,还可以直接在命令行中使用的。

在命令行中直接使用Python标准库的模块,最大的好处就是就是不用写代码,就能使用其中的功能,当临时需要一些某些功能的时候,用这种方式会快捷,方便很多。


1. 命令行中使用模块


命令行中使用python标准库的模块,一般格式如下:


python -m <mod-name> <options>
复制代码


其中,mod-name 是模块的名称;options 是模块的参数。


本篇列举的是我自己在命令行中常用的一些模块,并不是所有可在命令行中可用的模块。其它好用的模块,欢迎大家推荐。


2. http.server:静态文件服务


http.server 模块的参数主要有:


python -m http.server -h
usage: server.py [-h] [--cgi] [-b ADDRESS] [-d DIRECTORY] [-p VERSION] [port]
positional arguments: port bind to this port (default: 8000)
options: -h, --help show this help message and exit --cgi run as CGI server -b ADDRESS, --bind ADDRESS bind to this address (default: all interfaces) -d DIRECTORY, --directory DIRECTORY serve this directory (default: current directory) -p VERSION, --protocol VERSION conform to this HTTP version (default: HTTP/1.0)
复制代码


主要的参数:


  1. -b:如果需要让局域网的其他机器访问,可以设置 -b 0.0.0.0


  1. -d:设置静态文件服务的根目录


创建一个目录作为静态文件服务的根目录,并放入一个index.html文件。html 文件内容:


<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8" />    <meta name="viewport" content="width=device-width, initial-scale=1.0" />    <title>http.server</title>  </head>  <body>    <h1>hello</h1>    <br />    <h1>python -m http.server</h1>  </body></html>
复制代码


启动服务,效果如下:


python -m http.server -d ./sample-site
复制代码



3. gzip:压缩/解压缩


gzip模块可用来压缩,解压缩文件。


python -m gzip -h
usage: gzip.py [-h] [--fast | --best | -d] [file ...]
A simple command line interface for the gzip module: act like gzip, but do not delete the input file.
positional arguments: file
options: -h, --help show this help message and exit --fast compress faster --best compress better -d, --decompress act like gunzip instead of gzip
复制代码


压缩文件:


python -m gzip test.txt
# 会生成一个 test.txt.gz 文件
复制代码


解压文件(-d 参数用来解压):


python -m gzip -d test.txt.gz
# 会解压出 test.txt 文件
复制代码


4. base64:编码解码文件


当我们临时要用base64来编码或解码字符串的时候,可以用这个模块。


python -m base64 -h
usage: D:\miniconda3\envs\databook\Lib\base64.py [-h|-d|-e|-u|-t] [file|-] -h: print this help message and exit -d, -u: decode -e: encode (default) -t: encode and decode string 'Aladdin:open sesame'
复制代码


base64编码一个字符串:


echo "abcdefg" | python -m base64
YWJjZGVmZw0K
复制代码


解码 base64 字符串:用上面编码后的base64来还原。


echo "YWJjZGVmZw0K" | python -m base64 -d
abcdefg
复制代码


5. json.tool:更好的显示 json 结构


这个工具对于经常使用命令行的人来说,非常有用。从命令行访问某些 API 接口的时候,返回的 json 数据往往是压缩在一行,很难阅读。


json.tool模块的参数很多,但是一般大部分情况下是不需要设置的,使用参数的默认值就可以了:


python -m json.tool -husage: python -m json.tool [-h] [--sort-keys] [--no-ensure-ascii] [--json-lines]                           [--indent INDENT | --tab | --no-indent | --compact]                           [infile] [outfile]
A simple command line interface for json module to validate and pretty-print JSON objects.
positional arguments: infile a JSON file to be validated or pretty-printed outfile write the output of infile to outfile
options: -h, --help show this help message and exit --sort-keys sort the output of dictionaries alphabetically by key --no-ensure-ascii disable escaping of non-ASCII characters --json-lines parse input using the JSON Lines format. Use with --no-indent or --compact to produce valid JSON Lines output. --indent INDENT separate items with newlines and use this number of spaces for indentation --tab separate items with newlines and use tabs for indentation --no-indent separate items with spaces rather than newlines --compact suppress all whitespace separation (most compact)
复制代码


比如下面的json字符串:


echo '{"code":0,"message":"success""data":[{"name":"harry"},{"name":"joe"}]}' | python -m json.tool
{ "code": 0, "message": "success", "data": [ { "name": "harry" }, { "name": "joe" } ]}
复制代码


6. calendar:日历信息


calendar这个模块相当于是个命令行下的日历。可以指定某一年的日历(默认是当前年的):


python -m calendar 2022
复制代码



也可以指定某一某个的日历:


python -m calendar 2023 10
复制代码



这个命令还可以把日历转换成 HTML 格式导出,具体可以看它的 help 信息


7. ast:显示代码的抽象语法数


这个ast模块就强大了,它可以将原始的python代码转换为抽象语法树。基于抽象语法树,可以做一些底层的代码分析,代码生成,甚至转换成其它语言的代码等等。


ast模块的参数不多,一般用默认参数即可:


python -m ast -h
usage: python -m ast [-h] [-m {exec,single,eval,func_type}] [--no-type-comments] [-a] [-i INDENT] [infile]
positional arguments: infile the file to parse; defaults to stdin
options: -h, --help show this help message and exit -m {exec,single,eval,func_type}, --mode {exec,single,eval,func_type} specify what kind of code must be parsed --no-type-comments don't add information about type comments -a, --include-attributes include attributes such as line numbers and column offsets -i INDENT, --indent INDENT indentation of nodes (number of spaces)
复制代码


下面构造一个python代码文件(main.py),内容比较简单,就是一个累加的功能。


# -*- coding: utf-8 -*-
def sum(start, end): sum = 0 for i in range(start, end + 1): sum += i
print("1+2+...+10 = {}".format(sum))

if __name__ == "__main__": sum(1, 10)
复制代码


转换之后的抽象语法树为:


python -m ast main.py
Module( body=[ FunctionDef( name='sum', args=arguments( posonlyargs=[], args=[ arg(arg='start'), arg(arg='end')], ...省略... body=[ Assign( targets=[ Name(id='sum', ctx=Store())], value=Constant(value=0)), For( target=Name(id='i', ctx=Store()), ...省略... orelse=[]), Expr( value=Call( ...省略... keywords=[]))], decorator_list=[]), If( test=Compare( ...省略... orelse=[])], type_ignores=[])
复制代码


转换后的内容比较长,中间我省略一些内容。对完整的内容感兴趣,可以自己试试转换一个python代码文件。


文章转载自:wang_yb

原文链接:https://www.cnblogs.com/wang_yb/p/17826783.html

用户头像

EquatorCoco

关注

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
Python标准库中隐藏的利器_Python_EquatorCoco_InfoQ写作社区