Python 内置模块

本文介绍了Python中os.walk()和sys.argv模块的使用。os.walk()用于扫描指定目录下的子目录和文件,可自顶向下或自底向上扫描,还能输出指定后缀文件和子目录;sys.argv模块主要用于获取执行脚本的参数,增加参数可获取用户传入内容。

os.walk

os.walk()主要用来扫描某个指定目录下所包含的子目录和文件。这篇文章将通过几个简单的例子来说明python中os.walk()的使用方法。

假设我们的test文件夹有如下的目录结构,【可以在windows中通过tree /f命令来查看目录的文件结构】

D:.
├─dir1
│  │  1-1.txt
│  │  1-2.txt
│  │
│  └─dir1-1
│          1-1-1.txt
│
├─dir2
│      2-1.txt
│      2-2.txt
│
└─dir3
        3-1.txt
        3-2.txt

我们首先用os.walk扫描test文件夹下所有的子目录和文件:

import os

for curDir, dirs, files in os.walk("test"):
    print("====================")
    print("现在的目录:" + curDir)
    print("该目录下包含的子目录:" + str(dirs))
    print("该目录下包含的文件:" + str(files))

输出结果如下:

====================
现在的目录:D:/test/
该目录下包含的子目录:['dir1', 'dir2', 'dir3']
该目录下包含的文件:[]
====================
现在的目录:D:/test/dir1
该目录下包含的子目录:['dir1-1']
该目录下包含的文件:['1-1.txt', '1-2.txt']
====================
现在的目录:D:/test/dir1\dir1-1
该目录下包含的子目录:[]
该目录下包含的文件:['1-1-1.txt']
====================
现在的目录:D:/test/dir2
该目录下包含的子目录:[]
该目录下包含的文件:['2-1.txt', '2-2.txt']
====================
现在的目录:D:/test/dir3
该目录下包含的子目录:[]
该目录下包含的文件:['3-1.txt', '3-2.txt']

上面的代码在扫描子目录和文件的时候,是采用自顶向下的方式进行扫描。可以理解为是深度优先进行遍历。

如果想要自底向上地扫描子目录和文件,可以添加上topdown=False参数:

# 使用os.walk自底向上扫描目录
import os

for curDir, dirs, files in os.walk("test", topdown=False):
    print("====================")
    print("现在的目录:" + curDir)
    print("该目录下包含的子目录:" + str(dirs))
    print("该目录下包含的文件:" + str(files))

输出结果如下:

现在的目录:D:/test/dir1\dir1-1
该目录下包含的子目录:[]
该目录下包含的文件:['1-1-1.txt']
====================
现在的目录:D:/test/dir1
该目录下包含的子目录:['dir1-1']
该目录下包含的文件:['1-1.txt', '1-2.txt']
====================
现在的目录:D:/test/dir2
该目录下包含的子目录:[]
该目录下包含的文件:['2-1.txt', '2-2.txt']
====================
现在的目录:D:/test/dir3
该目录下包含的子目录:[]
该目录下包含的文件:['3-1.txt', '3-2.txt']
====================
现在的目录:D:/test/
该目录下包含的子目录:['dir1', 'dir2', 'dir3']
该目录下包含的文件:[]

我们还可以利用os.walk输出test文件夹下所有的文件:

# 使用os.walk输出某个目录下的所有文件
import os

for curDir, dirs, files in os.walk("test"):
    for file in files:
        print(os.path.join(curDir, file))

输出结果如下:

D:/test\dir1\1-1.txt
D:/test\dir1\1-2.txt
D:/test\dir1\dir1-1\1-1-1.txt
D:/test\dir2\2-1.txt
D:/test\dir2\2-2.txt
D:/test\dir3\3-1.txt
D:/test\dir3\3-2.txt

也可以利用os.walk输出test文件夹下指定后缀名(比如.txt)文件:

import os

for curDir, dirs, files in os.walk("D:/test"):
    for file in files:
        print(os.path.join(curDir, file))

输出结果如下:

D:/test\dir1\1-1.txt
D:/test\dir1\1-2.txt
D:/test\dir1\dir1-1\1-1-1.txt
D:/test\dir2\2-1.txt
D:/test\dir2\2-2.txt
D:/test\dir3\3-1.txt
D:/test\dir3\3-2.txt

同样地,我们也可以利用os.walk输出test文件夹下所有的子目录(子文件夹):

import os

for curDir, dirs, files in os.walk("D:/test"):
    for dir in dirs:
        print(dir)

输出结果:

dir1
dir2
dir3
dir1-1

shutil模块

import shutil

# 1. 删除文件夹
"""
path = os.path.join(base_path, 'xx')
shutil.rmtree(path)
"""

# 2. 拷贝文件夹
"""
shutil.copytree("/Users/wupeiqi/Desktop/图/csdn/","/Users/wupeiqi/PycharmProjects/CodeRepository/files")
"""

# 3.拷贝文件
"""
shutil.copy("/Users/wupeiqi/Desktop/图/csdn/WX20201123-112406@2x.png","/Users/wupeiqi/PycharmProjects/CodeRepository/")
shutil.copy("/Users/wupeiqi/Desktop/图/csdn/WX20201123-112406@2x.png","/Users/wupeiqi/PycharmProjects/CodeRepository/x.png")
"""

# 4.文件或文件夹重命名
"""
shutil.move("/Users/wupeiqi/PycharmProjects/CodeRepository/x.png","/Users/wupeiqi/PycharmProjects/CodeRepository/xxxx.png")
shutil.move("/Users/wupeiqi/PycharmProjects/CodeRepository/files","/Users/wupeiqi/PycharmProjects/CodeRepository/images")
"""

# 5. 压缩文件
"""
# base_name,压缩后的压缩包文件
# format,压缩的格式,例如:"zip", "tar", "gztar", "bztar", or "xztar".
# root_dir,要压缩的文件夹路径
"""
# shutil.make_archive(base_name=r'datafile',format='zip',root_dir=r'files')


# 6. 解压文件
"""
# filename,要解压的压缩包文件
# extract_dir,解压的路径
# format,压缩文件格式
"""
# shutil.unpack_archive(filename=r'datafile.zip', extract_dir=r'xxxxxx/xo', format='zip')

sys.argv模块

这个模块主要作用是获取获取执行脚本的参数。

import sys

print(sys.argv)

执行输出:

['c:/Users/vincent/Desktop/code/neimeng-python/test/test_argv.py']

输出结果是当前的执行文件。

当执行脚本时增加参数:python test.py 123 abc tom
执行结果输出:

['c:/Users/vincent/Desktop/code/neimeng-python/test/test_argv.py', 'abc', '123', 'tom']

就可以获取用户传入的参数。

<think> 首先,用户的问题是关于使用Python内置模块开发的简单小游戏。我需要基于参考的引用内容来回答。 回顾引用: - 引用[1]:提到了使用Python模块的示例,导入和使用函数。 - 引用[2]:直接提到Python内置模块可以开发游戏,特别是提到了Turtle模块,并使用命令 `python3 -m freegames copy snake` 来生成游戏源码如贪吃蛇。 用户的需求很明确:查找使用Python内置模块开发的简单小游戏。 我的回答需要: - 使用中文回答。 - 结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 - 如果引用内容,在末尾添加引用标识。 - 生成相关问题。 根据引用[2],它提到了 `freegames` 模块,这是一个Python模块,包含一些简单的游戏如贪吃蛇。命令是 `python3 -m freegames copy snake` 来获取源码。 我应该解释如何使用这个模块: - 安装 `freegames` 模块(如果需要)。 - 使用命令复制游戏代码。 - 运行游戏。 步骤: 1. **介绍模块**:Python内置模块如 `turtle`,可以用来开发简单游戏。引用中提到了 `freegames`,这是一个第三方模块,但用户问的是内置模块,所以需要澄清。`turtle` 是Python内置的图形模块。 用户说“内置模块”,所以优先介绍内置模块如 `turtle`。引用[2]提到了Turtle,并说可以使用 `freegames` 来获取源码,但 `freegames` 不是内置模块;它是需要安装的。内置模块如 `turtle` 可以直接使用。 在回答中,我应该: - 首先介绍内置模块如 `turtle` 可以用于开发简单游戏。 - 然后,提到 `freegames` 模块(虽然不是内置,但简单易用),作为扩展。 为了准确:`turtle` 是标准库的一部分,所以是内置的。`freegames` 是第三方模块。 2. **提供示例**: - 使用 `turtle` 模块创建一个简单游戏,如贪吃蛇或Pong的简化版。 - 或者,指导用户如何用 `freegames` 获取源码。 既然引用[2]直接提到了 `freegames copy snake`,我应该基于那个提供信息。 3. **结构回答**: - 逐步解释。 - 可能包括代码片段(用代码块)。 - 确保LaTeX语法正确,但这里可能不涉及数学表达式。 - 添加引用标识。 4. **生成相关问题**:在最后,添加相关问题。 回答大纲: - 介绍Python内置模块如 `turtle` 可以用于开发简单游戏。 - 提到 `freegames` 模块(第三方),它提供了一些预制的简单游戏。 - 教用户如何安装和使用 `freegames` 来获取游戏源码(基于引用)。 - 简要说明如何运行。 - 结束时有引用(如引用[2])。 - 生成相关问题。 引用标识:在回答中引用的段落末尾添加,如 [^2]。 完整回答: - 开头:Python有几个内置模块可以用来开发简单的小游戏,其中最常用的是 `turtle` 模块。 - 然后:此外,有一个第三方模块叫 `freegames`,它提供了一些简单的游戏实现,如贪吃蛇。 - 步骤:要使用 `freegames`,首先安装它:`pip install freegames`。然后,使用命令 `python -m freegames copy snake` 来复制贪吃蛇游戏的源码到当前目录。 - 运行:之后,运行生成的Python文件。 - 引用:基于引用[2],在相关地方添加 [^2]。 - 相关问题:在最后添加 §§相关问题§§。 确保真实性:我确认 `freegames` 模块存在,是一个流行的简单游戏集合。 相关问题建议: 1. 如何使用Python的turtle模块创建自己的简单游戏? 2. freegames模块中还有哪些其他游戏? 3. 如何修改这些游戏代码以添加新功能? 现在,构建回答。 </think>以下是针对您查询“使用Python内置模块开发的简单小游戏”的详细解答。我将逐步引导您解决问题,确保回答基于真实可靠的信息。Python内置模块(如 `turtle`)非常适合开发简单小游戏,它们易于上手且无需额外安装(除标准库外)。另外,我还将介绍一个第三方模块 `freegames`(参考引用),它虽然不是内置,但基于内置模块构建,并提供预制游戏源码,非常方便初学者。 ### 步骤1: 使用Python内置模块 `turtle` 开发简单游戏 Python的 `turtle` 模块是标准库的一部分,专为图形编程设计,常用于创建简单的2D游戏(如贪吃蛇、Pong或绘图游戏)。以下是开发一个基础贪吃蛇游戏的示例代码: - **原理**:`turtle` 提供画笔控制,通过坐标移动模拟游戏逻辑。 - **代码示例**(保存为 `snake_game.py` 并运行): ```python import turtle import time import random # 初始化屏幕 screen = turtle.Screen() screen.title("贪吃蛇游戏") screen.bgcolor("black") screen.setup(width=600, height=600) screen.tracer(0) # 关闭自动刷新 # 创建蛇头 head = turtle.Turtle() head.speed(0) head.shape("square") head.color("white") head.penup() head.goto(0, 0) head.direction = "stop" # 创建食物 food = turtle.Turtle() food.speed(0) food.shape("circle") food.color("red") food.penup() food.goto(0, 100) segments = [] # 存储蛇的身体段 # 移动函数 def move(): if head.direction == "up": y = head.ycor() head.sety(y + 20) if head.direction == "down": y = head.ycor() head.sety(y - 20) if head.direction == "left": x = head.xcor() head.setx(x - 20) if head.direction == "right": x = head.xcor() head.setx(x + 20) # 键盘控制 def go_up(): head.direction = "up" def go_down(): head.direction = "down" def go_left(): head.direction = "left" def go_right(): head.direction = "right" screen.listen() screen.onkey(go_up, "w") screen.onkey(go_down, "s") screen.onkey(go_left, "a") screen.onkey(go_right, "d") # 主游戏循环 while True: screen.update() time.sleep(0.1) move() # 检测碰撞食物 if head.distance(food) < 20: x = random.randint(-290, 290) y = random.randint(-290, 290) food.goto(x, y) new_segment = turtle.Turtle() new_segment.speed(0) new_segment.shape("square") new_segment.color("grey") new_segment.penup() segments.append(new_segment) # 移动身体段 for index in range(len(segments)-1, 0, -1): x = segments[index-1].xcor() y = segments[index-1].ycor() segments[index].goto(x, y) if len(segments) > 0: x = head.xcor() y = head.ycor() segments[0].goto(x, y) # 检测边界碰撞 if head.xcor()>290 or head.xcor()<-290 or head.ycor()>290 or head.ycor()<-290: time.sleep(1) head.goto(0,0) head.direction = "stop" for segment in segments: segment.goto(1000, 1000) # 移出屏幕 segments.clear() ``` 运行此代码后,您将看到一个简单的贪吃蛇游戏: - 使用 `WASD` 键控制方向。 - 吃到食物(红点)后蛇身变长。 - 撞到边界游戏重置。 ### 步骤2: 使用 `freegames` 模块获取预制游戏源码 虽然 `freegames` 不是Python内置模块(需额外安装),但它基于 `turtle` 构建,提供多个简单游戏的完整源码(如贪吃蛇、记忆匹配等)。安装和使用步骤如下: 1. **安装模块**(通过pip): ```bash pip install freegames ``` 2. **复制游戏源码**(例如贪吃蛇)到当前目录: ```bash python -m freegames copy snake ``` 执行后,会在当前文件夹生成 `snake.py` 文件。 3. **运行游戏**: ```bash python snake.py ``` 游戏将启动一个图形窗口,使用键盘方向键控制蛇移动[^2]。 `freegames` 还支持其他游戏,如 `puzzle`(拼图)、`memory`(记忆游戏)等。完整列表可通过 `python -m freegames list` 查看。 ### 注意事项 - **内置 vs 第三方**:`turtle` 是Python标准库的一部分,无需安装;`freegames` 是第三方模块,但安装简单且源码易修改。 - **学习价值**:通过修改这些代码(如添加计分系统),您可以深入理解游戏开发原理。 - **参考信息**:`freegames` 的源码基于 `turtle`,适合教育用途[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值