文章4:探索Python的标准库
目标:
了解并利用Python标准库提高效率,包括掌握文件I/O操作、使用os和sys模块管理文件系统与命令行参数、学习正则表达式的基础知识以及时间处理方法。
一、文件I/O操作(open(), read(), write())
1. 基础用法
Python通过内置的open()函数打开文件,返回一个文件对象,支持读写操作。基本语法如下:
file = open("filename.txt", mode)模式参数(mode):
"r":只读(默认)。"w":覆盖写入(文件不存在则创建)。"a":追加写入(文件不存在则创建)。"rb"/"wb":二进制模式(读/写)。
示例:写入文件
with open("example.txt", "w") as file:
file.write("Hello, Python Standard Library!")示例:读取文件
with open("example.txt", "r") as file:
content = file.read()
print(content)with语句:确保文件在操作完成后自动关闭,避免资源泄漏。
2. 高级操作
- 逐行读取:
with open("example.txt", "r") as file:
for line in file:
print(line.strip()) # 去除换行符- 追加写入:
with open("example.txt", "a") as file:
file.write("\nAppending new content.")二、os和sys模块
1. os模块:文件系统操作
os模块提供与操作系统交互的功能,常用于文件和目录管理。
常用函数:
os.getcwd():获取当前工作目录。os.listdir(path):列出指定目录下的文件和子目录。os.makedirs(path):递归创建目录。os.path.exists(path):检查路径是否存在。os.path.join():跨平台路径拼接。
示例:创建目录并检查文件
import os
# 创建目录
os.makedirs("data", exist_ok=True)
# 检查文件是否存在
if os.path.exists("example.txt"):
print("File exists!")2. sys模块:系统级功能
sys模块提供对Python解释器的访问,常用于命令行参数、标准输入输出控制等。
常用功能:
sys.argv:获取命令行参数(列表形式)。sys.stdin/sys.stdout/sys.stderr:标准输入输出流。sys.exit():退出程序。
示例:命令行参数处理
import sys
if len(sys.argv) < 2:
print("Usage: python script.py <filename>")
sys.exit(1) # 非零表示异常退出
filename = sys.argv[1]
print(f"Processing file: {filename}")三、正则表达式(re模块)
正则表达式用于文本模式匹配,re模块提供了一系列函数实现其功能。
1. 基础语法
- 元字符:
.:匹配任意单个字符。*:匹配前一个字符零次或多次。+:匹配前一个字符一次或多次。?:匹配前一个字符零次或一次。^:开头匹配。$:结尾匹配。[]:字符集合(如[a-z]匹配小写字母)。
2. 常用函数
re.search(pattern, string):搜索整个字符串,返回第一个匹配对象。re.match(pattern, string):仅从开头匹配。re.findall(pattern, string):返回所有匹配的列表。re.sub(pattern, replacement, string):替换匹配内容。
示例:提取邮箱
import re
text = "Contact us at support@example.com or sales@example.com"
pattern = r"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b"
emails = re.findall(pattern, text)
print(emails) # 输出:['support@example.com', 'sales@example.com']四、时间处理(datetime模块)
datetime模块提供日期和时间操作的功能,核心类包括datetime, date, time, timedelta。
1. 获取当前时间
from datetime import datetime
now = datetime.now()
print(f"Current time: {now}") # 输出:2023-09-20 14:30:45.1234562. 日期时间格式化
date_str = now.strftime("%Y-%m-%d %H:%M:%S")
print(f"Formatted time: {date_str}") # 输出:2023-09-20 14:30:453. 时间差计算(timedelta)
from datetime import timedelta
delta = timedelta(days=2, hours=5)
future_time = now + delta
print(f"Time after 2 days and 5 hours: {future_time}")4. 字符串转时间对象
date_str = "2023-09-20 14:30:00"
parsed_date = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
print(parsed_date) # 输出:2023-09-20 14:30:00五、综合示例:日志记录程序
import os
import sys
import re
from datetime import datetime
def log_message(message):
with open("app.log", "a") as log_file:
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
log_file.write(f"[{timestamp}] {message}\n")
def validate_filename(filename):
pattern = r"^[a-zA-Z0-9_]+\.[a-z]+$"
return bool(re.match(pattern, filename))
def main():
if len(sys.argv) != 2:
log_message("Error: Incorrect number of arguments.")
print("Usage: python app.py <filename>")
sys.exit(1)
filename = sys.argv[1]
if not validate_filename(filename):
log_message(f"Error: Invalid filename '{filename}'.")
print("Invalid filename format.")
sys.exit(2)
log_message(f"Processing file: {filename}")
print(f"Processing started for {filename}")
if __name__ == "__main__":
main()练习题
- 编写一个程序,读取
data.txt文件并统计其中的单词数量。 - 使用
os模块创建一个名为backup的目录,并在其中生成一个包含当前时间的文件。 - 编写一个正则表达式,匹配形如
"AAA-1234"的字符串(前三位大写字母,后四位数字)。 - 计算从当前时间到2024年元旦的天数。
通过掌握标准库,你可以高效地完成文件操作、系统交互、文本处理和时间管理等任务,为后续的高级开发奠定基础。









