java程序员怎么从Python小白变成Python大拿?(四)

99 阅读3分钟

文章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()

练习题

  1. 编写一个程序,读取​​data.txt​​文件并统计其中的单词数量。
  2. 使用​​os​​​模块创建一个名为​​backup​​的目录,并在其中生成一个包含当前时间的文件。
  3. 编写一个正则表达式,匹配形如​​"AAA-1234"​​的字符串(前三位大写字母,后四位数字)。
  4. 计算从当前时间到2024年元旦的天数。

通过掌握标准库,你可以高效地完成文件操作、系统交互、文本处理和时间管理等任务,为后续的高级开发奠定基础。