文章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.123456
2. 日期时间格式化
date_str = now.strftime("%Y-%m-%d %H:%M:%S")
print(f"Formatted time: {date_str}") # 输出:2023-09-20 14:30:45
3. 时间差计算(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年元旦的天数。
通过掌握标准库,你可以高效地完成文件操作、系统交互、文本处理和时间管理等任务,为后续的高级开发奠定基础。