0
点赞
收藏
分享

微信扫一扫

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

文章4:探索Python的标准库

目标:

了解并利用Python标准库提高效率,包括掌握文件I/O操作、使用ossys模块管理文件系统与命令行参数、学习正则表达式的基础知识以及时间处理方法。

一、文件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.")

二、ossys模块

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年元旦的天数。

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

举报

相关推荐

0 条评论