Post

Python Stdlib

标准库

  1. os:提供了与操作系统交互的函数,例如文件和目录操作。
  2. sys:提供了访问Python解释器及其环境的变量和函数。
  3. math:提供了数学计算函数,例如三角函数、指数函数等。
  4. random:提供了生成随机数的函数。
  5. datetime:提供了处理日期和时间的函数和类。
  6. re:提供了正则表达式功能,用于字符串匹配和处理。
  7. json:提供了处理JSON数据的函数和类。
  8. csv:提供了读写CSV格式文件的函数和类。
  9. urllib:提供了与HTTP协议相关的函数和类,用于发送HTTP请求和接收响应。
  10. socket:提供了网络编程所需的基本功能,例如创建套接字、发送和接收数据等。

除此之外,还有许多其他模块,例如collectionsitertoolsfunctoolslogging 等,它们提供了各种实用功能和工具。使用Python标准库可以大幅度提高编程效率,并且在大多数情况下,它们提供的功能已经足够满足常见需求。

1. os模块

1
2
3
4
5
6
7
8
9
10
11
12
13
  import os
  
  # 获取当前工作目录
  cur_dir = os.getcwd()
  print(cur_dir)
  
  # 创建目录
  new_dir = os.path.join(cur_dir, 'new_folder')
  os.mkdir(new_dir)
  
  # 列出目录内容
  content = os.listdir(cur_dir)
  print(content)

这个例子演示了如何使用os模块进行文件和目录操作。通过getcwd()函数可以获取当前工作目录,使用join() 函数可以拼接路径,使用mkdir()函数可以创建新目录,使用listdir()函数可以列出目录内容。

2. sys模块

1
2
3
4
5
6
7
8
9
10
  import sys
  
  # 打印命令行参数
  args = sys.argv
  for arg in args:
      print(arg)
  
  # 获取Python解释器信息
  info = sys.version_info
  print(info)

这个例子演示了如何使用sys模块访问Python解释器及其环境的变量和函数。通过argv 变量可以获取命令行参数,通过version_info变量可以获取Python解释器版本信息。

3. math模块

1
2
3
4
5
6
7
8
9
10
11
12
13
  import math
  
  # 计算正弦值
  sin_val = math.sin(math.pi/4)
  print(sin_val)
  
  # 计算自然指数
  exp_val = math.exp(2)
  print(exp_val)
  
  # 向上取整
  ceil_val = math.ceil(4.3)
  print(ceil_val)

这个例子演示了如何使用math模块进行数学计算。通过sin()函数可以计算给定角度的正弦值,使用exp() 函数可以计算自然指数,使用ceil()函数可以将浮点数向上取整。

4. random模块

1
2
3
4
5
6
7
8
9
10
import random

# 生成随机整数
rand_int = random.randint(1, 10)
print(rand_int)

# 从列表中选择随机元素
my_list = ['apple', 'banana', 'orange']
rand_item = random.choice(my_list)
print(rand_item)

这个例子演示了如何使用random模块生成随机数。通过randint()函数可以生成指定范围内的随机整数,使用choice() 函数可以从列表中随机选择一个元素。

5. datetime模块

1
2
3
4
5
6
7
8
9
import datetime

# 获取当前日期和时间
now = datetime.datetime.now()
print(now)

# 格式化时间字符串
str_time = now.strftime("%Y-%m-%d %H:%M:%S")
print(str_time)

这个例子演示了如何使用datetime模块处理日期和时间。通过now()函数可以获取当前日期和时间,使用strftime() 函数可以将日期和时间格式化为指定的字符串格式。

6. re模块

1
2
3
4
5
6
7
8
import re

# 查找匹配的字符串
pattern = r'hello\s(\w+)'
text = 'hello world'
match_obj = re.search(pattern, text)
if match_obj:
    print(match_obj.group(1))

这个例子演示了如何使用re模块进行正则表达式匹配。通过search() 函数可以在文本中查找与指定模式匹配的字符串,并返回一个匹配对象,使用group()方法可以获取匹配到的字符串。

7. json模块

1
2
3
4
5
6
7
8
9
10
11
import json

# 将Python对象转换为JSON字符串
data = {'name': 'Alice', 'age': 25}
json_str = json.dumps(data)
print(json_str)

# 将JSON字符串转换为Python对象
json_data = '{"name": "Bob", "age": 30}'
py_obj = json.loads(json_data)
print(py_obj)

这个例子演示了如何使用json模块处理JSON数据。通过dumps()函数可以将Python对象转换为JSON字符串,使用loads() 函数可以将JSON字符串转换为Python对象。

8. csv模块

1
2
3
4
5
6
7
8
9
10
11
12
13
import csv

# 写入CSV文件
data = [['Name', 'Age'], ['Alice', 25], ['Bob', 30]]
with open('people.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerows(data)

# 读取CSV文件
with open('people.csv', 'r') as file:
    reader = csv.reader(file)
    for row in reader:
        print(row)

这个例子演示了如何使用csv模块进行CSV文件的读写。通过writerows()函数可以将数据写入CSV文件,使用reader() 函数可以读取CSV文件,并且返回以每一行作为元素的列表。

9. urllib模块

1
2
3
4
5
6
import urllib.request

# 发送GET请求并获取响应
response = urllib.request.urlopen('http://www.baidu.com')
html = response.read()
print(html)

这个例子演示了如何使用urllib模块发送HTTP请求,并接收响应。使用urlopen() 函数可以发送GET请求并获取响应。响应内容是字节类型的数据,可以使用decode()方法将其转换为文本类型的数据。

10. socket模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import socket

# 创建套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接服务器
server_address = ('localhost', 8888)
sock.connect(server_address)

# 发送和接收数据
message = b'Hello, server!'
sock.sendall(message)
data = sock.recv(1024)
print(data)

# 关闭套接字
sock.close()

这个例子演示了如何使用socket模块进行网络编程。通过socket()函数可以创建套接字对象,使用connect() 函数可以连接到指定地址和端口的服务器,使用sendall()函数可以发送数据,使用recv()函数可以接收数据,最后使用close() 函数关闭套接字。

完整例子

以下是一个包含以上标准库的Python代码片段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import os
import sys
import math
import random
import datetime
import re
import json
import csv
import urllib.request
import socket

# 使用标准库函数和方法
print(os.listdir('.'))
print(sys.version_info)
print(math.pi)
print(random.randint(1, 10))
print(datetime.datetime.now())
print(re.findall(r'\b\w+\b', 'Hello, World!'))
print(json.dumps({'name': 'Alice', 'age': 25}))
data = [['Name', 'Age'], ['Alice', 25], ['Bob', 30]]
with open('people.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerows(data)
response = urllib.request.urlopen('http://www.baidu.com')
html = response.read()
print(html)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('localhost', 8888)
sock.connect(server_address)
message = b'Hello, server!'
sock.sendall(message)
data = sock.recv(1024)
print(data)
sock.close()
  • 这个代码片段演示了如何使用以上标准库。具体地:

    • os模块:使用listdir()函数列出当前目录下的文件和子目录。
    • sys模块:使用version_info属性获取Python解释器版本信息。
    • math模块:使用pi常量获取圆周率。
    • random模块:使用randint()函数生成指定范围内的随机整数。
    • datetime模块:使用datetime.now()函数获取当前日期和时间。
    • re模块:使用findall()函数查找字符串中的单词。
    • json模块:使用dumps()函数将Python对象转换为JSON格式的字符串。
    • csv模块:使用writerows()函数将数据写入CSV文件。
    • urllib.request模块:使用urlopen()函数发送HTTP请求并获取响应。
    • socket模块:使用套接字对象创建网络连接,发送和接收数据。

最后,这个代码片段的运行结果可以根据具体环境而定。例如,输出当前目录下的文件列表、Python解释器版本信息、圆周率等是固定的;而生成的随机整数、当前日期和时间、从网站获取的HTML内容、服务器返回的数据等则会因为不同的运行环境而不同。

This post is licensed under CC BY 4.0 by the author.