当前位置: 首页 > news >正文

python从入门到精通(二十五):文件操作和目录管理难度分级练习题

文件操作和目录管理

    • 文件操作
      • 基础难度
        • 1. 简单文件写入
        • 2. 简单文件读取
        • 3. 追加内容到文件
      • 中级难度
        • 4. 逐行读取文件并统计行数
        • 5. 读取文件并提取特定信息
        • 6. 复制文件内容到新文件
      • 高级难度
        • 7. 处理二进制文件
        • 8. 批量文件处理
        • 9. 日志文件分析
      • 参考答案示例
        • 1. 简单文件写入
        • 2. 简单文件读取
        • 3. 追加内容到文件
        • 4. 逐行读取文件并统计行数
        • 5. 读取文件并提取特定信息
        • 6. 复制文件内容到新文件
        • 7. 处理二进制文件
        • 8. 批量文件处理
        • 9. 日志文件分析
    • 目录管理
      • 基础难度
        • 1. 创建目录
        • 2. 删除空目录
        • 3. 检查目录是否存在
      • 中级难度
        • 4. 遍历目录并打印文件
        • 5. 复制目录结构
        • 6. 重命名目录
      • 高级难度
        • 7. 批量删除指定类型的文件
        • 8. 统计目录下文件数量和总大小
        • 9. 按日期分类移动文件
      • 练习题答案示例
        • 1. 创建目录
        • 2. 删除空目录
        • 3. 检查目录是否存在
        • 4. 遍历目录并打印文件
        • 5. 复制目录结构
        • 6. 重命名目录
        • 7. 批量删除指定类型的文件
        • 8. 统计目录下文件数量和总大小
        • 9. 按日期分类移动文件
    • 文件操作和目录同时练习
      • 初级难度
        • 1. 创建目录并写入文件
        • 2. 读取指定目录下文件内容
        • 3. 删除目录下指定文件
      • 中级难度
        • 4. 遍历目录并统计文件数量和大小
        • 5. 复制目录及其内容
        • 6. 按文件类型分类整理目录
      • 高级难度
        • 7. 备份指定目录并压缩
        • 8. 递归清理空目录
        • 9. 分析目录结构并生成报告
      • 参考答案示例
        • 1. 创建目录并写入文件
        • 2. 读取指定目录下文件内容
        • 3. 删除目录下指定文件
        • 4. 遍历目录并统计文件数量和大小
        • 5. 复制目录及其内容
        • 6. 按文件类型分类整理目录
        • 7. 备份指定目录并压缩
        • 8. 递归清理空目录
        • 9. 分析目录结构并生成报告

以下是一系列使用 Python open 函数进行文件读写操作的练习题,难度逐步递增。

文件操作

基础难度

1. 简单文件写入

编写一个 Python 程序,使用 open 函数创建一个名为 test.txt 的文件,并向其中写入字符串 “Hello, World!”。

# 在此处编写代码
2. 简单文件读取

编写一个程序,使用 open 函数打开之前创建的 test.txt 文件,并读取其内容,然后将内容打印出来。

# 在此处编写代码
3. 追加内容到文件

使用 open 函数打开 test.txt 文件,以追加模式向文件中添加新的一行 “This is an additional line.”。

# 在此处编写代码

中级难度

4. 逐行读取文件并统计行数

编写一个 Python 程序,使用 open 函数打开一个文本文件(假设文件名为 large_text.txt),逐行读取文件内容,并统计文件的总行数,最后将行数打印出来。

# 在此处编写代码
5. 读取文件并提取特定信息

假设有一个文本文件 data.txt,其中每行包含一个姓名和一个年龄,用逗号分隔(例如:“Alice,25”)。编写一个程序,使用 open 函数读取该文件,提取出所有年龄大于 30 岁的人的姓名,并将这些姓名打印出来。

# 在此处编写代码
6. 复制文件内容到新文件

编写一个程序,使用 open 函数打开一个源文件(假设为 source.txt),将其内容复制到一个新的文件(假设为 destination.txt)中。

# 在此处编写代码

高级难度

7. 处理二进制文件

编写一个 Python 程序,使用 open 函数以二进制模式打开一个图片文件(例如 image.jpg),读取其内容,然后将内容写入一个新的图片文件(例如 new_image.jpg),实现图片的复制。

# 在此处编写代码
8. 批量文件处理

假设有一个文件夹,其中包含多个文本文件(扩展名为 .txt)。编写一个程序,使用 open 函数遍历该文件夹中的所有文本文件,统计每个文件中的单词数量,并将文件名和对应的单词数量写入一个新的文件 word_count_summary.txt 中。

# 在此处编写代码
9. 日志文件分析

假设有一个日志文件 log.txt,每行记录了一个事件,格式为 [时间戳] 事件描述。编写一个 Python 程序,使用 open 函数读取该日志文件,统计每个小时内发生的事件数量,并将结果写入一个新的文件 hourly_event_count.txt 中。

# 在此处编写代码

参考答案示例

1. 简单文件写入
with open('test.txt', 'w') as file:file.write('Hello, World!')
2. 简单文件读取
with open('test.txt', 'r') as file:content = file.read()print(content)
3. 追加内容到文件
with open('test.txt', 'a') as file:file.write('\nThis is an additional line.')
4. 逐行读取文件并统计行数
line_count = 0
with open('large_text.txt', 'r') as file:for line in file:line_count += 1
print(f"文件的总行数为: {line_count}")
5. 读取文件并提取特定信息
names = []
with open('data.txt', 'r') as file:for line in file:name, age = line.strip().split(',')if int(age) > 30:names.append(name)
print("年龄大于 30 岁的人的姓名:")
for name in names:print(name)
6. 复制文件内容到新文件
with open('source.txt', 'r') as source_file:content = source_file.read()with open('destination.txt', 'w') as dest_file:dest_file.write(content)
7. 处理二进制文件
with open('image.jpg', 'rb') as source_file:binary_data = source_file.read()with open('new_image.jpg', 'wb') as dest_file:dest_file.write(binary_data)
8. 批量文件处理
import osfolder_path = '.'  # 当前文件夹
with open('word_count_summary.txt', 'w') as summary_file:for filename in os.listdir(folder_path):if filename.endswith('.txt'):word_count = 0with open(os.path.join(folder_path, filename), 'r') as file:for line in file:words = line.split()word_count += len(words)summary_file.write(f"{filename}: {word_count} 个单词\n")
9. 日志文件分析
hourly_count = {}
with open('log.txt', 'r') as file:for line in file:timestamp = line.split(']')[0][1:].split(':')[0]if timestamp in hourly_count:hourly_count[timestamp] += 1else:hourly_count[timestamp] = 1
with open('hourly_event_count.txt', 'w') as output_file:for hour, count in hourly_count.items():output_file.write(f"{hour}:00 - {hour}:59: {count} 个事件\n")

目录管理

以下是不同难度级别的 Python 目录操作练习题,涵盖了创建、删除、遍历、重命名等常见的目录操作。

基础难度

1. 创建目录

编写一个 Python 程序,使用 os 模块创建一个名为 new_directory 的新目录。如果该目录已经存在,则输出提示信息。

import os# 请在此处编写代码
2. 删除空目录

编写一个程序,使用 os 模块删除名为 empty_directory 的空目录。如果目录不存在,则输出相应的错误信息。

import os# 请在此处编写代码
3. 检查目录是否存在

编写一个 Python 程序,检查名为 existing_directory 的目录是否存在。如果存在,输出 目录存在;如果不存在,输出 目录不存在

import os# 请在此处编写代码

中级难度

4. 遍历目录并打印文件

编写一个程序,使用 os 模块遍历指定目录(假设为当前目录 .)下的所有文件和子目录,并打印出所有文件的名称。

import os# 请在此处编写代码
5. 复制目录结构

编写一个 Python 程序,将一个源目录(例如 source_dir)的目录结构复制到目标目录(例如 target_dir),但不复制文件内容,只复制目录结构。

import os# 请在此处编写代码
6. 重命名目录

编写一个程序,使用 os 模块将名为 old_name 的目录重命名为 new_name。如果原目录不存在,输出相应的错误信息。

import os# 请在此处编写代码

高级难度

7. 批量删除指定类型的文件

编写一个 Python 程序,遍历指定目录(例如 data_dir)及其子目录,删除所有扩展名为 .tmp 的临时文件。

import os# 请在此处编写代码
8. 统计目录下文件数量和总大小

编写一个程序,统计指定目录(例如 stats_dir)下的文件数量和所有文件的总大小(以字节为单位),并输出统计结果。

import os# 请在此处编写代码
9. 按日期分类移动文件

假设在一个目录(例如 unsorted_dir)中有很多文件,文件名包含日期信息(例如 2023-01-01_file.txt)。编写一个 Python 程序,根据文件名中的日期信息,将文件移动到以日期命名的子目录中(例如 2023-01-01 目录)。

import os
import shutil# 请在此处编写代码

练习题答案示例

1. 创建目录
import osdirectory = 'new_directory'
if not os.path.exists(directory):os.mkdir(directory)print(f'目录 {directory} 创建成功!')
else:print(f'目录 {directory} 已经存在!')
2. 删除空目录
import osdirectory = 'empty_directory'
if os.path.exists(directory):if os.path.isdir(directory) and len(os.listdir(directory)) == 0:os.rmdir(directory)print(f'目录 {directory} 删除成功!')else:print(f'目录 {directory} 不是空目录,无法删除!')
else:print(f'目录 {directory} 不存在!')
3. 检查目录是否存在
import osdirectory = 'existing_directory'
if os.path.exists(directory) and os.path.isdir(directory):print('目录存在')
else:print('目录不存在')
4. 遍历目录并打印文件
import osfor root, dirs, files in os.walk('.'):for file in files:print(os.path.join(root, file))
5. 复制目录结构
import ossource_dir = 'source_dir'
target_dir = 'target_dir'def copy_directory_structure(source, target):if not os.path.exists(target):os.makedirs(target)for item in os.listdir(source):s = os.path.join(source, item)t = os.path.join(target, item)if os.path.isdir(s):copy_directory_structure(s, t)copy_directory_structure(source_dir, target_dir)
6. 重命名目录
import osold_name = 'old_name'
new_name = 'new_name'if os.path.exists(old_name) and os.path.isdir(old_name):os.rename(old_name, new_name)print(f'目录 {old_name} 重命名为 {new_name} 成功!')
else:print(f'目录 {old_name} 不存在!')
7. 批量删除指定类型的文件
import osdata_dir = 'data_dir'for root, dirs, files in os.walk(data_dir):for file in files:if file.endswith('.tmp'):file_path = os.path.join(root, file)os.remove(file_path)print(f'删除文件: {file_path}')
8. 统计目录下文件数量和总大小
import osstats_dir = 'stats_dir'
file_count = 0
total_size = 0for root, dirs, files in os.walk(stats_dir):for file in files:file_path = os.path.join(root, file)file_count += 1total_size += os.path.getsize(file_path)print(f'文件数量: {file_count}')
print(f'总大小: {total_size} 字节')
9. 按日期分类移动文件
import os
import shutilunsorted_dir = 'unsorted_dir'for file in os.listdir(unsorted_dir):if os.path.isfile(os.path.join(unsorted_dir, file)):try:date_str = file.split('_')[0]date_dir = os.path.join(unsorted_dir, date_str)if not os.path.exists(date_dir):os.makedirs(date_dir)source_file = os.path.join(unsorted_dir, file)target_file = os.path.join(date_dir, file)shutil.move(source_file, target_file)print(f'移动文件 {file}{date_dir}')except IndexError:print(f'文件名 {file} 不包含日期信息,跳过!')

文件操作和目录同时练习

初级难度

1. 创建目录并写入文件

编写一个 Python 程序,首先创建一个名为 my_project 的新目录。然后在该目录下创建一个名为 readme.txt 的文件,并向其中写入文本 “This is a sample project.”。

import os# 请在此处编写代码
2. 读取指定目录下文件内容

给定一个目录路径(假设为 test_folder),编写程序检查该目录是否存在。如果存在,读取该目录下名为 data.txt 的文件内容并打印出来;若文件或目录不存在,给出相应提示。

import os# 请在此处编写代码
3. 删除目录下指定文件

有一个目录 temp_files,编写程序删除该目录下所有扩展名为 .bak 的文件。若目录不存在,输出错误信息。

import os# 请在此处编写代码

中级难度

4. 遍历目录并统计文件数量和大小

编写一个程序,遍历指定目录(如 project_files)及其所有子目录,统计其中文件的总数和所有文件的总大小(以字节为单位),并将结果输出。同时,要忽略隐藏文件(文件名以 . 开头的文件)。

import os# 请在此处编写代码
5. 复制目录及其内容

编写一个 Python 程序,将一个源目录(如 source_folder)及其所有子目录和文件复制到目标目录(如 destination_folder)。如果目标目录已存在,先清空它;若不存在,则创建它。

import os
import shutil# 请在此处编写代码
6. 按文件类型分类整理目录

假设在一个目录 mixed_files 中有各种类型的文件(如 .txt, .jpg, .pdf 等)。编写程序将这些文件按文件类型分类,在该目录下创建以文件扩展名命名的子目录(如 txt, jpg, pdf),并将相应类型的文件移动到对应的子目录中。

import os
import shutil# 请在此处编写代码

高级难度

7. 备份指定目录并压缩

编写一个 Python 程序,对指定目录(如 important_data)进行备份。将该目录及其所有内容复制到一个以当前日期命名的新目录(如 backup_20250307),然后使用 zipfile 模块将备份目录压缩成一个 ZIP 文件(如 backup_20250307.zip),最后删除备份目录。

import os
import shutil
import zipfile
from datetime import datetime# 请在此处编写代码
8. 递归清理空目录

编写一个递归函数,清理指定目录(如 large_directory)及其子目录下的所有空目录。如果某个目录下的所有子目录都为空且该目录本身也为空,则将其删除。

import os# 请在此处编写代码
9. 分析目录结构并生成报告

编写一个程序,分析指定目录(如 complex_project)的结构,统计每个子目录下的文件数量和不同文件类型的分布情况。将分析结果以易读的格式写入一个名为 structure_report.txt 的文件中。

import os# 请在此处编写代码

参考答案示例

1. 创建目录并写入文件
import os# 创建目录
dir_name = 'my_project'
if not os.path.exists(dir_name):os.mkdir(dir_name)# 写入文件
file_path = os.path.join(dir_name, 'readme.txt')
with open(file_path, 'w') as f:f.write('This is a sample project.')
2. 读取指定目录下文件内容
import osdir_path = 'test_folder'
file_name = 'data.txt'
file_path = os.path.join(dir_path, file_name)if os.path.exists(dir_path):if os.path.exists(file_path):with open(file_path, 'r') as f:content = f.read()print(content)else:print(f"文件 {file_name} 不存在于 {dir_path} 中。")
else:print(f"目录 {dir_path} 不存在。")
3. 删除目录下指定文件
import osdir_path = 'temp_files'
if os.path.exists(dir_path):for file in os.listdir(dir_path):if file.endswith('.bak'):file_path = os.path.join(dir_path, file)os.remove(file_path)
else:print(f"目录 {dir_path} 不存在。")
4. 遍历目录并统计文件数量和大小
import osdir_path = 'project_files'
file_count = 0
total_size = 0for root, dirs, files in os.walk(dir_path):for file in files:if not file.startswith('.'):file_path = os.path.join(root, file)file_count += 1total_size += os.path.getsize(file_path)print(f"文件总数: {file_count}")
print(f"总大小: {total_size} 字节")
5. 复制目录及其内容
import os
import shutilsource_dir = 'source_folder'
destination_dir = 'destination_folder'if os.path.exists(destination_dir):shutil.rmtree(destination_dir)shutil.copytree(source_dir, destination_dir)
6. 按文件类型分类整理目录
import os
import shutilmixed_dir = 'mixed_files'
for file in os.listdir(mixed_dir):file_path = os.path.join(mixed_dir, file)if os.path.isfile(file_path):file_ext = os.path.splitext(file)[1][1:]ext_dir = os.path.join(mixed_dir, file_ext)if not os.path.exists(ext_dir):os.mkdir(ext_dir)shutil.move(file_path, os.path.join(ext_dir, file))
7. 备份指定目录并压缩
import os
import shutil
import zipfile
from datetime import datetimesource_dir = 'important_data'
date_str = datetime.now().strftime("%Y%m%d")
backup_dir = f'backup_{date_str}'# 复制目录
shutil.copytree(source_dir, backup_dir)# 压缩备份目录
with zipfile.ZipFile(f'{backup_dir}.zip', 'w', zipfile.ZIP_DEFLATED) as zipf:for root, dirs, files in os.walk(backup_dir):for file in files:file_path = os.path.join(root, file)zipf.write(file_path, os.path.relpath(file_path, backup_dir))# 删除备份目录
shutil.rmtree(backup_dir)
8. 递归清理空目录
import osdef remove_empty_directories(dir_path):for root, dirs, files in os.walk(dir_path, topdown=False):for directory in dirs:dir_full_path = os.path.join(root, directory)if not os.listdir(dir_full_path):os.rmdir(dir_full_path)dir_to_clean = 'large_directory'
remove_empty_directories(dir_to_clean)
9. 分析目录结构并生成报告
import osproject_dir = 'complex_project'
report_file = 'structure_report.txt'with open(report_file, 'w') as f:for root, dirs, files in os.walk(project_dir):file_count = len(files)file_type_count = {}for file in files:file_ext = os.path.splitext(file)[1]if file_ext in file_type_count:file_type_count[file_ext] += 1else:file_type_count[file_ext] = 1f.write(f"目录: {root}\n")f.write(f"  文件数量: {file_count}\n")f.write("  文件类型分布:\n")for ext, count in file_type_count.items():f.write(f"    {ext}: {count} 个\n")f.write("\n")

http://www.mrgr.cn/news/93558.html

相关文章:

  • 【华三】STP端口角色与状态深度解析
  • MySQL------存储引擎和用户和授权
  • 从0开始的操作系统手搓教程25:使用环状缓冲区来让我们的键盘驱动真正的有作用起来
  • 200W数据去重入库的几种方法及优缺点
  • STM32-I2C通信协议
  • Browser Use+DeepSeek的使用教程
  • LTC6804、LTC6811、LTC6813的使用
  • Linux 软硬链接
  • 音视频入门基础:RTP专题(14)——FFmpeg源码中,对H.264的各种RTP有效载荷结构的解析
  • python从入门到精通(二十四):python爬虫实现登录功能
  • 996引擎-问题处理:实现自定义道具变身卡
  • 【C++ 函数重载】—— 现代编译技术下的多态表达与性能优化
  • ubuntu22.04机器人开发环境配置
  • Elasticsearch 2025/3/7
  • 记录片《遇见大连》
  • LeetCode 哈希章节
  • window系统中的start命令详解
  • 网络编程-----服务器(多路复用IO 和 TCP并发模型)
  • Vue Hooks 深度解析:从原理到实践
  • STM32之软件SPI